powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зачем нужны бизнес-объекты?
25 сообщений из 101, страница 4 из 5
Зачем нужны бизнес-объекты?
    #35077951
Dark_Scorpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, насколько я понял есть следующая альтернатива:
а) Изучить SQL и делать всю логику в хранимках + DataTable + DataReader
б) изучить ряд смежных технологий (nhibernate, linq…), построить объектную модель для всей БД + сделать для неё маппинг

Так понимаю большинство участников дискуссии поддерживают второй способ. Но я не понимаю чем он лучше первого.

После того как объектная модель построена, появляется возможность следующим образом работать с данными:
Код: plaintext
1.
2.
3.
4.
5.
ISession session = ...
var query = (
          from user in session.Linq<User>()
          where user.Name == "ayende"
          select user
      ).ToList(); 
1) Какой в этом плюс? Тоже самое можно было написать и на обычном SQL который все знают.

AlexeiKвот вам легко использовать ООП инструменты(датаридер и другие) для решения задач.
представьте ,что есть человек который решает задачи чуть крупнее ваших,но за счет инструментов,которые вы дадите ему. вот из вашего стиля вытекает,что тот человек не получит от вас никаких объектов таких как датасет или датаридер. он будет писать все тоже самое ,что и вы,и добавлять свое.добавлять свое,потому что ваш код можно взять лишь через copy & paste ,а вот ООП инструментов из вашего кода не родишь.
Для каждой сущности я разрабатываю класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class t_user
{
    public DataTable user_list(decimal id_post)   
    { … }
    public DataTable user_details(decimal id)
    { … }
    public int user_update(decimal id, string user_name, bool enabled, DateTime birthday)
    { … }
    public int user_insert(string user_name, bool enabled, DateTime birthday)
    { … }
    public int user_delete(decimal id)
    { … }
}
Потом этот класс используется на многих страницах сайта через ObjectDataSource
Один раз разработав такой класс – его может использовать любой.
Также в этих методах реализован механизм кэширования.
Всё через DataTable, DataReader + хранимки
2) В чём ущербность моего подхода?
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35077980
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark_Scorpionа) Изучить SQL и делать всю логику в хранимках + DataTable + DataReader
Вы вспотеете писать на T-SQL (или PL/SQL) сложную логику. Плюс поимеете проблемы с версионностью. Плюс банально неудобно -- нет такой поддержки IDE, как для того же C#.
Dark_Scorpion 1) Какой в этом плюс? Тоже самое можно было написать и на обычном SQL который все знают.
Да хотя мы compile-time проверки уже многого стоят. И все вышеперечисленные причины.
Dark_Scorpion
Для каждой сущности я разрабатываю класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class t_user
{
    public DataTable user_list(decimal id_post)   
    { … }
    public DataTable user_details(decimal id)
    { … }
    public int user_update(decimal id, string user_name, bool enabled, DateTime birthday)
    { … }
    public int user_insert(string user_name, bool enabled, DateTime birthday)
    { … }
    public int user_delete(decimal id)
    { … }
}

Фигня, а не класс. Объяснить или сами справитесь?
Dark_Scorpion
Также в этих методах реализован механизм кэширования.
Вот за такое убивать на месте. Не должен ничего этот класс знать о кешировании.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078060
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark_Scorpion
есть еще вариант.подумать головой,а не брать не пойми что.
вариант своего движка.

ведь 1 и 2 пункты:) это просто надстройки над данными. они не решают задачу бизнесс объектов.в этом и есть ньанс.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078382
Dark_Scorpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч Вы вспотеете писать на T-SQL (или PL/SQL) сложную логику
ту логику, которую уж очень сложно сделать на SQL пишу в web-приложении, работая с DataTable.
Хотя так полагаю, что если логика сложна и на SQL её проблемно написать, то при использовании объектной модели БД эта задача также решается с потугами.
НахлобучФигня, а не класс. Объяснить или сами справитесь?
Объясните.
НахлобучВот за такое убивать на месте. Не должен ничего этот класс знать о кешировании.
А где реализовывать логику кэширования как не здесь? Если в кэше есть объект, то метод user_list достанет его из кэша и не полезет в БД. А допустим метод user_update почистит кэш, т.к. данные были изменены.

AlexeiK
есть еще вариант.подумать головой,а не брать не пойми что.
вариант своего движка.
ведь 1 и 2 пункты:) это просто надстройки над данными. они не решают задачу бизнесс объектов.в этом и есть ньанс.
я использую первый пункт, это вариант моего «движка», который как раз и реализует надстройку над данными.

Я не говорю что мой способ лучше. Я хочу понять чем он хуже, и имеет ли мне смысл полностью менять стиль проектирования web-приложений переходя на новые технологии.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078386
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dark_Scorpion
>2) В чём ущербность моего подхода?

Да нет здесь никакой ущербности.
Локальная база данных (DataSet) это один из представителей бизнес-объектов. Ничем не хуже и ничем не лучше.
Но это только данные. Если для Ваших целей этого достаточно (Вы их на клиенте только отображаете) и ладно. Если нет, добавте функционал в виде множеста функциональных классов с методами.
Какой функционал? Определяется задачей. Со строками таблиц DataSet можно работать как с массивом.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078445
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Сахават Юсифов
>РМ и Кодд такая же туфта как и ОО...
Несколько резковато.
Но если посмотреть с другой стороны:
Допустим, что каждая запись имеет суррогатный ключ (например Guid). Этот ключ можно рассматривать как адрес записи в некотором пространстве. Тогда строка таблицы не более как struct или ArrayList или что-то подобное.
А с этими структурами работаем уже давно, не вспоминая ни самого Кодда, ни его заповедей.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078454
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark_Scorpion
ту логику, которую уж очень сложно сделать на SQL пишу в web-приложении, работая с DataTable.
А как же тогда ваше высказывание насчет "Изучить SQL и делать всю логику в хранимках + DataTable + DataReader"?
Dark_Scorpion
Хотя так полагаю, что если логика сложна и на SQL её проблемно написать, то при использовании объектной модели БД эта задача также решается с потугами.

Очень сильно ошибаетесь.
Dark_Scorpion
Объясните.

А где реализовывать логику кэширования как не здесь? Если в кэше есть объект, то метод user_list достанет его из кэша и не полезет в БД. А допустим метод user_update почистит кэш, т.к. данные были изменены.
Если позволите, совмещу два ваши предложения.

Во-первых, это класс не для сущности, а для доступа к данным, что совсем не одно и то же. Вот если бы вы сейчас написали тут класс User со свойствами ID, Name, Enabled, Birthdaty и т.д. -- было бы другое дело.

Во-вторых, класс для доступа к данным, возвращающий DataTable -- очень и очень плохо (говорю про частные случаи, при слабоструктурированных данных может сойти как самый крайний вариант).

В-третьих, ваше это кэширование. Это так называемый Cross-Cutting Concern, и реализация кэширования у вас будет ровным слоем размазана по всем подобным классам (в базовый класс тоже много не вынесешь). Правильно будет использовать, например, AOP и управлять кэшированием декларативно (атрибутами, которые навешиваются на методы).

В-четвертых, (но это мелочь) стиль именования не самый лучший.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078460
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dark_Scorpion

1.То что теперь ты знаешь о всях надстройках,являеться не правильным ответом на твой вопрос.то есть просто не про то.
2.вопрос темы " Зачем нужны бизнес-объекты? ",а ты потом задал другой вопрос При необходимости загрузить данные из БД в слое данных пишу функцию, возвращающую SqlDataReader или DataSet. Всегда делал так, пока не сказали что это неправильно. твой вопрос с вопросом темы нигде не коррелирует.

и вот от этих не правильных вопросов,ты узнал о nhibernate и других надстройках. так что че тут...

и каждый последующий свой пост,ты смешиваешь всю кашу еще больше)
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078550
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч
В-третьих, ваше это кэширование. Это так называемый Cross-Cutting Concern, и реализация кэширования у вас будет ровным слоем размазана по всем подобным классам (в базовый класс тоже много не вынесешь). Правильно будет использовать, например, AOP и управлять кэшированием декларативно (атрибутами, которые навешиваются на методы).
пока все тут спорят на пустом месте, меня вчера замучал один вопрос. Хибернейт я все-же не хочу, ибо громоздко для текущих нужд, плюс хочу потренироваться в LINQ. Есть очень старый проект, превратившийся со временем в заднее место, который я хочу немного переписать изнутри под dlinq, и вот собственно какая мысль меня мучает: для нормальной работы просто необходимо иметь кеш второго уровня, соответственно встает вопрос о его реализации. DataContext сам по себе уже реализует простейший кеш, но каждый экземпляр контекста самостоятелен, а значит во избежание рассинхронизации с базой и прочих глюков, по моим выводам контекст должен жить исключительно на уровне одного реквеста. Соответственно нормальный кеш нужно реализовывать отдельно поверх dlinq. Известны ли вам паттерны или способы реализации (или готовые реализации), чтобы не изобретать велосипед и не писать свой хибернейт? у последнего хоть и очень хороший кеш, в котором я вижу главный плюс, но связываться с этим зверем все-же пока не хочется по различным соображениям.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078744
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
Известны ли вам паттерны или способы реализации (или готовые реализации), чтобы не изобретать велосипед и не писать свой хибернейт? у последнего хоть и очень хороший кеш, в котором я вижу главный плюс, но связываться с этим зверем все-же пока не хочется по различным соображениям.

Посмотрите тогда на Castle ActiveRecord. достаточно граммотная обертка над хибернейтом. в тоже время получите хороший кэш второго уровня. А паттерн так и называется ActiveRecord описан все в той же книжке Фаулера PoEAA.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078809
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, мне не надо обертку над хибернейтом, мне надо кеширующую обертку над dlinq-ом :)
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078840
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
нет, мне не надо обертку над хибернейтом, мне надо кеширующую обертку над dlinq-ом :)

это фобия такая что ли? :-) перед хибернейтом )))

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078872
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я же написал выше, во-первых не хочу потому что не хочу, во-вторых хочу потренироваться в dlinq. Начал с поиска костылей для кеширования сущностей. Суть в том что, как я сейчас представляю, мне придется либо писать полностью обертку вокруг dlinq, чтобы управлять выборками и тем что лежит в кеше, либо делать это в логике выше, чего я особенно не хочу, ибо неверно.
хм, надо кстати подумать в сторону наследования от datacontext, возможно все получится не так уж плохо, как я описал
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35078980
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
у я же написал выше, во-первых не хочу потому что не хочу, во-вторых хочу потренироваться в dlinq

ok :-) отписывайте результаты здесь. может быть чем и поможем тут вам.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35079064
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Sa
>отписывайте результаты здесь ...
Очень даже было бы хорошо. Помочь правда вряд ли чем смогу - знаний не хватает, но поучиться с большим желанием.

С уважением, Владимир.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35079637
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cache с исходниками есть в Microsoft EntLib.
А начем основываются утверждения, что кэш обязателен?
Мне доводилось учавствовать в разработке биллинговой системы, которая была сертифицированна по тем временам на 2мил пользователей, и там никакого кэша не было.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35079688
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaCache с исходниками есть в Microsoft EntLib.

конечно спасибо, но такой детский уровень мне не нужен. Я озадачился прозрачным кешем аля хибернейт, но для длинка.
SeVa
А начем основываются утверждения, что кэш обязателен?

на здравом смысле и экономии аппаратных ресурсов
SeVa
Мне доводилось учавствовать в разработке биллинговой системы, которая была сертифицированна по тем временам на 2мил пользователей, и там никакого кэша не было.
не все системы одинаковые на вкус и цвет
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35079717
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Успехов.Там глядишь и Microsoft прикупит!
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080131
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы[quot SeVa]
А начем основываются утверждения, что кэш обязателен?

на здравом смысле и экономии аппаратных ресурсов
[quot SeVa]
ну в плане экономии аппаратных ресурсов ситуация как раз обратная будет в случае реализации кеша. На времени отклика от БД может еще и сэкономите, на всем остальном - нет.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080180
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
ну в плане экономии аппаратных ресурсов ситуация как раз обратная будет в случае реализации кеша. На времени отклика от БД может еще и сэкономите, на всем остальном - нет.
у вас реальный опыт или просто мыслите в слух? что дешевле, память или более мощный БД сервер? что эффективней, обратиться к базе 30 раз в процессе открытия страницы и закешировать результат (контент, ресурсы), а позже ни разу не обращаться, или каждый раз по 30?
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080318
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зыу вас реальный опыт или просто мыслите в слух? что дешевле, память или более мощный БД сервер? что эффективней, обратиться к базе 30 раз в процессе открытия страницы и закешировать результат (контент, ресурсы), а позже ни разу не обращаться, или каждый раз по 30?
Реальный. Любой кеш требует дополнительной памяти, и чем хуже управляемый этот кеш - тем больше памяти и проблем с черезмерным ее расходованием. Или память не аппартный ресурс?
...
При использовании пуллинга, время на открытие соединения мизерно, все дальнейшее зависит от реализации кеша: хранилища (файл, память, БД), управляемости (срок жизни объектов), величины коллекций и их кол-ва (одна коллекция на все классы или одна на каждый), а также от размера данных в БД и насколько эффективно реализовано их хранение.
(прямой запрос по секционированной вьюхе может выполниться на порядок быстрее, чем поиск в перегруженном кеше).
Фаулер также не столь категоричен по поводу использованию кеша.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080595
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникРеальный. Любой кеш требует дополнительной памяти, и чем хуже управляемый этот кеш - тем больше памяти и проблем с черезмерным ее расходованием. Или память не аппартный ресурс?
Сравнили, пардон, попу с пальцем. Вменяемый сервер, на который можно взгромоздить MSSQL, стоит несколько тысяч уе. За такие деньги вы обложите веб-сервер плашками с памятью по самые гланды, да еще и останется. И с учетом того что вот это:
Роман Дынник
При использовании пуллинга, время на открытие соединения мизерно, все дальнейшее зависит от реализации кеша: хранилища (файл, память, БД), управляемости (срок жизни объектов), величины коллекций и их кол-ва (одна коллекция на все классы или одна на каждый), а также от размера данных в БД и насколько эффективно реализовано их хранение.
(прямой запрос по секционированной вьюхе может выполниться на порядок быстрее, чем поиск в перегруженном кеше).
очень сильно далеко от правды (опять же -- сравните время, необходимое на открытие соединения, запрос к СУБД по сети, отработку запроса на стороне сервера и передачу результатов по той же сети со временем доступа к памяти; разница будет на порядки).
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080752
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я свои примеры не могу привести, но те байки по поводу проблем даже на кластерных решениях и далеко недешевых серверах, которые я слышал по поводу AOS (app-сервер использующий кеш) в Axapta, все таки заставляют меня взглянуть на мир по-другому и не гнаться за модой.
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080839
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникЯ свои примеры не могу привести, но те байки по поводу проблем даже на кластерных решениях и далеко недешевых серверах, которые я слышал по поводу AOS (app-сервер использующий кеш) в Axapta, все таки заставляют меня взглянуть на мир по-другому и не гнаться за модой.
А говорите, что "реальный опыт".
...
Рейтинг: 0 / 0
Зачем нужны бизнес-объекты?
    #35080964
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникЯ свои примеры не могу привести, но те байки по поводу проблем даже на кластерных решениях и далеко недешевых серверах, которые я слышал по поводу AOS (app-сервер использующий кеш) в Axapta, все таки заставляют меня взглянуть на мир по-другому и не гнаться за модой.
что значит "даже на кластерных"? кластерные технологии уже ниже плинтуса что-ли в вашем "опыте"? для веб-ферм существуют другие алгоритмы кеширования, репликация и т.п.. Тот же хибернейт это поддерживает через различные реализации кеша.
...
Рейтинг: 0 / 0
25 сообщений из 101, страница 4 из 5
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зачем нужны бизнес-объекты?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]