|
|
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Вобщем, насколько я понял есть следующая альтернатива: а) Изучить SQL и делать всю логику в хранимках + DataTable + DataReader б) изучить ряд смежных технологий (nhibernate, linq…), построить объектную модель для всей БД + сделать для неё маппинг Так понимаю большинство участников дискуссии поддерживают второй способ. Но я не понимаю чем он лучше первого. После того как объектная модель построена, появляется возможность следующим образом работать с данными: Код: plaintext 1. 2. 3. 4. 5. AlexeiKвот вам легко использовать ООП инструменты(датаридер и другие) для решения задач. представьте ,что есть человек который решает задачи чуть крупнее ваших,но за счет инструментов,которые вы дадите ему. вот из вашего стиля вытекает,что тот человек не получит от вас никаких объектов таких как датасет или датаридер. он будет писать все тоже самое ,что и вы,и добавлять свое.добавлять свое,потому что ваш код можно взять лишь через copy & paste ,а вот ООП инструментов из вашего кода не родишь. Для каждой сущности я разрабатываю класс: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Один раз разработав такой класс – его может использовать любой. Также в этих методах реализован механизм кэширования. Всё через DataTable, DataReader + хранимки 2) В чём ущербность моего подхода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 11:01 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
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. Фигня, а не класс. Объяснить или сами справитесь? Dark_Scorpion Также в этих методах реализован механизм кэширования. Вот за такое убивать на месте. Не должен ничего этот класс знать о кешировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 11:08 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Dark_Scorpion есть еще вариант.подумать головой,а не брать не пойми что. вариант своего движка. ведь 1 и 2 пункты:) это просто надстройки над данными. они не решают задачу бизнесс объектов.в этом и есть ньанс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 11:21 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Нахлобуч Вы вспотеете писать на T-SQL (или PL/SQL) сложную логику ту логику, которую уж очень сложно сделать на SQL пишу в web-приложении, работая с DataTable. Хотя так полагаю, что если логика сложна и на SQL её проблемно написать, то при использовании объектной модели БД эта задача также решается с потугами. НахлобучФигня, а не класс. Объяснить или сами справитесь? Объясните. НахлобучВот за такое убивать на месте. Не должен ничего этот класс знать о кешировании. А где реализовывать логику кэширования как не здесь? Если в кэше есть объект, то метод user_list достанет его из кэша и не полезет в БД. А допустим метод user_update почистит кэш, т.к. данные были изменены. AlexeiK есть еще вариант.подумать головой,а не брать не пойми что. вариант своего движка. ведь 1 и 2 пункты:) это просто надстройки над данными. они не решают задачу бизнесс объектов.в этом и есть ньанс. я использую первый пункт, это вариант моего «движка», который как раз и реализует надстройку над данными. Я не говорю что мой способ лучше. Я хочу понять чем он хуже, и имеет ли мне смысл полностью менять стиль проектирования web-приложений переходя на новые технологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 12:27 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
>Dark_Scorpion >2) В чём ущербность моего подхода? Да нет здесь никакой ущербности. Локальная база данных (DataSet) это один из представителей бизнес-объектов. Ничем не хуже и ничем не лучше. Но это только данные. Если для Ваших целей этого достаточно (Вы их на клиенте только отображаете) и ладно. Если нет, добавте функционал в виде множеста функциональных классов с методами. Какой функционал? Определяется задачей. Со строками таблиц DataSet можно работать как с массивом. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 12:27 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
>Сахават Юсифов >РМ и Кодд такая же туфта как и ОО... Несколько резковато. Но если посмотреть с другой стороны: Допустим, что каждая запись имеет суррогатный ключ (например Guid). Этот ключ можно рассматривать как адрес записи в некотором пространстве. Тогда строка таблицы не более как struct или ArrayList или что-то подобное. А с этими структурами работаем уже давно, не вспоминая ни самого Кодда, ни его заповедей. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 12:39 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
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 и управлять кэшированием декларативно (атрибутами, которые навешиваются на методы). В-четвертых, (но это мелочь) стиль именования не самый лучший. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 12:42 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Dark_Scorpion 1.То что теперь ты знаешь о всях надстройках,являеться не правильным ответом на твой вопрос.то есть просто не про то. 2.вопрос темы " Зачем нужны бизнес-объекты? ",а ты потом задал другой вопрос При необходимости загрузить данные из БД в слое данных пишу функцию, возвращающую SqlDataReader или DataSet. Всегда делал так, пока не сказали что это неправильно. твой вопрос с вопросом темы нигде не коррелирует. и вот от этих не правильных вопросов,ты узнал о nhibernate и других надстройках. так что че тут... и каждый последующий свой пост,ты смешиваешь всю кашу еще больше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 12:44 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Нахлобуч В-третьих, ваше это кэширование. Это так называемый Cross-Cutting Concern, и реализация кэширования у вас будет ровным слоем размазана по всем подобным классам (в базовый класс тоже много не вынесешь). Правильно будет использовать, например, AOP и управлять кэшированием декларативно (атрибутами, которые навешиваются на методы). пока все тут спорят на пустом месте, меня вчера замучал один вопрос. Хибернейт я все-же не хочу, ибо громоздко для текущих нужд, плюс хочу потренироваться в LINQ. Есть очень старый проект, превратившийся со временем в заднее место, который я хочу немного переписать изнутри под dlinq, и вот собственно какая мысль меня мучает: для нормальной работы просто необходимо иметь кеш второго уровня, соответственно встает вопрос о его реализации. DataContext сам по себе уже реализует простейший кеш, но каждый экземпляр контекста самостоятелен, а значит во избежание рассинхронизации с базой и прочих глюков, по моим выводам контекст должен жить исключительно на уровне одного реквеста. Соответственно нормальный кеш нужно реализовывать отдельно поверх dlinq. Известны ли вам паттерны или способы реализации (или готовые реализации), чтобы не изобретать велосипед и не писать свой хибернейт? у последнего хоть и очень хороший кеш, в котором я вижу главный плюс, но связываться с этим зверем все-же пока не хочется по различным соображениям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 13:03 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
зы Известны ли вам паттерны или способы реализации (или готовые реализации), чтобы не изобретать велосипед и не писать свой хибернейт? у последнего хоть и очень хороший кеш, в котором я вижу главный плюс, но связываться с этим зверем все-же пока не хочется по различным соображениям. Посмотрите тогда на Castle ActiveRecord. достаточно граммотная обертка над хибернейтом. в тоже время получите хороший кэш второго уровня. А паттерн так и называется ActiveRecord описан все в той же книжке Фаулера PoEAA. Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 13:52 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
нет, мне не надо обертку над хибернейтом, мне надо кеширующую обертку над dlinq-ом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 14:04 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
зы нет, мне не надо обертку над хибернейтом, мне надо кеширующую обертку над dlinq-ом :) это фобия такая что ли? :-) перед хибернейтом ))) Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 14:15 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
ну я же написал выше, во-первых не хочу потому что не хочу, во-вторых хочу потренироваться в dlinq. Начал с поиска костылей для кеширования сущностей. Суть в том что, как я сейчас представляю, мне придется либо писать полностью обертку вокруг dlinq, чтобы управлять выборками и тем что лежит в кеше, либо делать это в логике выше, чего я особенно не хочу, ибо неверно. хм, надо кстати подумать в сторону наследования от datacontext, возможно все получится не так уж плохо, как я описал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 14:27 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
зы у я же написал выше, во-первых не хочу потому что не хочу, во-вторых хочу потренироваться в dlinq ok :-) отписывайте результаты здесь. может быть чем и поможем тут вам. Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 14:51 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
>Sa >отписывайте результаты здесь ... Очень даже было бы хорошо. Помочь правда вряд ли чем смогу - знаний не хватает, но поучиться с большим желанием. С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 15:13 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Cache с исходниками есть в Microsoft EntLib. А начем основываются утверждения, что кэш обязателен? Мне доводилось учавствовать в разработке биллинговой системы, которая была сертифицированна по тем временам на 2мил пользователей, и там никакого кэша не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 17:33 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
SeVaCache с исходниками есть в Microsoft EntLib. конечно спасибо, но такой детский уровень мне не нужен. Я озадачился прозрачным кешем аля хибернейт, но для длинка. SeVa А начем основываются утверждения, что кэш обязателен? на здравом смысле и экономии аппаратных ресурсов SeVa Мне доводилось учавствовать в разработке биллинговой системы, которая была сертифицированна по тем временам на 2мил пользователей, и там никакого кэша не было. не все системы одинаковые на вкус и цвет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 17:44 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Успехов.Там глядишь и Microsoft прикупит! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 17:53 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
зы[quot SeVa] А начем основываются утверждения, что кэш обязателен? на здравом смысле и экономии аппаратных ресурсов [quot SeVa] ну в плане экономии аппаратных ресурсов ситуация как раз обратная будет в случае реализации кеша. На времени отклика от БД может еще и сэкономите, на всем остальном - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 22:39 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник ну в плане экономии аппаратных ресурсов ситуация как раз обратная будет в случае реализации кеша. На времени отклика от БД может еще и сэкономите, на всем остальном - нет. у вас реальный опыт или просто мыслите в слух? что дешевле, память или более мощный БД сервер? что эффективней, обратиться к базе 30 раз в процессе открытия страницы и закешировать результат (контент, ресурсы), а позже ни разу не обращаться, или каждый раз по 30? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 23:34 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
зыу вас реальный опыт или просто мыслите в слух? что дешевле, память или более мощный БД сервер? что эффективней, обратиться к базе 30 раз в процессе открытия страницы и закешировать результат (контент, ресурсы), а позже ни разу не обращаться, или каждый раз по 30? Реальный. Любой кеш требует дополнительной памяти, и чем хуже управляемый этот кеш - тем больше памяти и проблем с черезмерным ее расходованием. Или память не аппартный ресурс? ... При использовании пуллинга, время на открытие соединения мизерно, все дальнейшее зависит от реализации кеша: хранилища (файл, память, БД), управляемости (срок жизни объектов), величины коллекций и их кол-ва (одна коллекция на все классы или одна на каждый), а также от размера данных в БД и насколько эффективно реализовано их хранение. (прямой запрос по секционированной вьюхе может выполниться на порядок быстрее, чем поиск в перегруженном кеше). Фаулер также не столь категоричен по поводу использованию кеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 07:02 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Роман ДынникРеальный. Любой кеш требует дополнительной памяти, и чем хуже управляемый этот кеш - тем больше памяти и проблем с черезмерным ее расходованием. Или память не аппартный ресурс? Сравнили, пардон, попу с пальцем. Вменяемый сервер, на который можно взгромоздить MSSQL, стоит несколько тысяч уе. За такие деньги вы обложите веб-сервер плашками с памятью по самые гланды, да еще и останется. И с учетом того что вот это: Роман Дынник При использовании пуллинга, время на открытие соединения мизерно, все дальнейшее зависит от реализации кеша: хранилища (файл, память, БД), управляемости (срок жизни объектов), величины коллекций и их кол-ва (одна коллекция на все классы или одна на каждый), а также от размера данных в БД и насколько эффективно реализовано их хранение. (прямой запрос по секционированной вьюхе может выполниться на порядок быстрее, чем поиск в перегруженном кеше). очень сильно далеко от правды (опять же -- сравните время, необходимое на открытие соединения, запрос к СУБД по сети, отработку запроса на стороне сервера и передачу результатов по той же сети со временем доступа к памяти; разница будет на порядки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 10:03 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Я свои примеры не могу привести, но те байки по поводу проблем даже на кластерных решениях и далеко недешевых серверах, которые я слышал по поводу AOS (app-сервер использующий кеш) в Axapta, все таки заставляют меня взглянуть на мир по-другому и не гнаться за модой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 10:43 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Роман ДынникЯ свои примеры не могу привести, но те байки по поводу проблем даже на кластерных решениях и далеко недешевых серверах, которые я слышал по поводу AOS (app-сервер использующий кеш) в Axapta, все таки заставляют меня взглянуть на мир по-другому и не гнаться за модой. А говорите, что "реальный опыт". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 10:58 |
|
||
|
Зачем нужны бизнес-объекты?
|
|||
|---|---|---|---|
|
#18+
Роман ДынникЯ свои примеры не могу привести, но те байки по поводу проблем даже на кластерных решениях и далеко недешевых серверах, которые я слышал по поводу AOS (app-сервер использующий кеш) в Axapta, все таки заставляют меня взглянуть на мир по-другому и не гнаться за модой. что значит "даже на кластерных"? кластерные технологии уже ниже плинтуса что-ли в вашем "опыте"? для веб-ферм существуют другие алгоритмы кеширования, репликация и т.п.. Тот же хибернейт это поддерживает через различные реализации кеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 11:20 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35080752&tid=1352450]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 370ms |

| 0 / 0 |
