|
|
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЕгоров АлександрЯ сомневаюсь в преимуществе объектно-ориентированной работы с данными в РСУБД используя технологии на базе ORM .Я опять вас не понимаю...Выделил непонятное... Bogdanov AndreyВообще, что вы называете "работой с данными". У меня ни в одной системе задачи "работы с данными" не возникало. Возникали задачи реализации того или иного бизнес-процесса или "user-case". А что тогда делает Ваша система, например, при обработке бизнес-процесса "принять заявку к исполнению" (внутри которого есть бизнес-функция "зарезервировать товар по заявке"), чтобы результат этого процесса отразился у других пользователей системы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 18:07 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Егоров АлександрА что тогда делает Ваша система, например, при обработке бизнес-процесса "принять заявку к исполнению" (внутри которого есть бизнес-функция "зарезервировать товар по заявке"), чтобы результат этого процесса отразился у других пользователей системы?Для разработчика бизнес-функций это выглядит, как "Товар.Зарезервировать(количество)". И проблем с пониманием того, что эта запись означает ни у кого не возникает. А учитывая, что среда еще и сама список доступных методов показывает, то и проблем с написанием тоже. И этот разработчик не задумывается о том, что такое "Товар" - просто идентификатор или какая-то сложная структура, о том что делает метод "Зарезервировать" - просто update, или вызывает Web-сервис и рассылает десяток писем и СМС с предупреждениями Я утрирую, конечно, но метод "резервировать товар по заявке" я писал несколько лет назад и всех деталей уже не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 09:57 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЕгоров АлександрА что тогда делает Ваша система, например, при обработке бизнес-процесса "принять заявку к исполнению" (внутри которого есть бизнес-функция "зарезервировать товар по заявке"), чтобы результат этого процесса отразился у других пользователей системы?Для разработчика бизнес-функций это выглядит, как "Товар.Зарезервировать(количество)". И проблем с пониманием того, что эта запись означает ни у кого не возникает. А учитывая, что среда еще и сама список доступных методов показывает, то и проблем с написанием тоже. И этот разработчик не задумывается о том, что такое "Товар" - просто идентификатор или какая-то сложная структура, о том что делает метод "Зарезервировать" - просто update, или вызывает Web-сервис и рассылает десяток писем и СМС с предупреждениями жесть конечно, как говорится. Но фоне рассуждений о бизнес-логике, ее устройстве и способах реализации, вдруг всплывают такие подробности. Оказывается разработчики бизнес-логики, понятия не имеют как эта логика работает. Но уверены, что работает круто. Тогда хочется спросить: во время рассказов о скорости разработчки, простоте и прочих чудесах... где скрывались люди, которые пишут внутренности этих самых "Товар.Зарезервировать(количество)"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:15 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Вставлю свои пять копеек. Как сделал я когда писал для сети автосалонов. WinForms, ADO.NET, WebServices, MS SQL Server Тоже первый раз делал трехзвенку, но понимание уже примерное было. Сделал 1. Морда. Фабрика классов. Управление формами, контроль ввода 2. Среднее звено. Выборка данных из базы по операции и вставка в базу данных по этой же операции Вебсервис имеет два метода DataSet OpenData(int OID, string Operation) и SaveData(int OID, string Opeation, DataSet Data) Также фабрика классов. По идентификатору объекта ищется класс, создается экземпляр, находится у него операция и вызывается ее метод выборки данных - Open. Метод виртуальный, для каждого класса своя логика, по большей части наследуется. Метод выбирает все необходимые данные для операции, складывает в один DataSet и возвращает его. При сохранении у операции вызывается метод Save. Передается туда датасет и класс сам сохраняет данные вызывая соответствующие хранимые процедуры. Там же логика связанная с транзакциями. 3. База данных также имеет фабрику классов и всю логику для работы с данными. Резюме 1. Логика контроля ввода и манипулирования окнами 2. Логика преобразования из одной структуры в другую. То есть из кучи таблиц в один датасет и обратно. Сюда же приписывается взаимодействие системы с другими системами: почта, импорт-экспорт, что-то еще... 3. Бизнес-логика -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:24 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
iscrafmжесть конечно, как говорится. Но фоне рассуждений о бизнес-логике, ее устройстве и способах реализации, вдруг всплывают такие подробности. Оказывается разработчики бизнес-логики, понятия не имеют как эта логика работает. Но уверены, что работает круто. Тогда хочется спросить: во время рассказов о скорости разработчки, простоте и прочих чудесах... где скрывались люди, которые пишут внутренности этих самых "Товар.Зарезервировать(количество)"?Я правильно понимаю, что вы с точностью до байта знаете содержание всех сетевых пакетов, которые идут при выполнении резервирования товара, а также сможете сразу перечислить те сектора на диске в которых произойдут изменения? Или вы все-таки тоже пользуетесь разработками других программистов не влезая досконально в их внутренности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:42 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andreyiscrafmжесть конечно, как говорится. Но фоне рассуждений о бизнес-логике, ее устройстве и способах реализации, вдруг всплывают такие подробности. Оказывается разработчики бизнес-логики, понятия не имеют как эта логика работает. Но уверены, что работает круто. Тогда хочется спросить: во время рассказов о скорости разработчки, простоте и прочих чудесах... где скрывались люди, которые пишут внутренности этих самых "Товар.Зарезервировать(количество)"?Я правильно понимаю, что вы с точностью до байта знаете содержание всех сетевых пакетов, которые идут при выполнении резервирования товара, а также сможете сразу перечислить те сектора на диске в которых произойдут изменения? Или вы все-таки тоже пользуетесь разработками других программистов не влезая досконально в их внутренности? нет, сетевые пакеты и секторы на диске меня не интересуют. Утирирование крайне неудачное. Но я с точностью до таблицы, поля в БД, условий, ограничений и т.п. знаю, что делает функция резервирования товара. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:47 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
iscrafmнет, сетевые пакеты и секторы на диске меня не интересуют. Утирирование крайне неудачное. Но я с точностью до таблицы, поля в БД, условий, ограничений и т.п. знаю, что делает функция резервирования товара.Мне своершенно непонятно почему вы остановились именно на таком уровне абстракции. Вы можете как-то обосновать, то что именно до уровня таблиц, полей и т.п. должен доходить разработчик того или иного бизнес-процесса. Почему он не может оперировать классами бизнес-модели или байтами в файлах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:57 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andreyiscrafmнет, сетевые пакеты и секторы на диске меня не интересуют. Утирирование крайне неудачное. Но я с точностью до таблицы, поля в БД, условий, ограничений и т.п. знаю, что делает функция резервирования товара.Мне своершенно непонятно почему вы остановились именно на таком уровне абстракции. Вы можете как-то обосновать, то что именно до уровня таблиц, полей и т.п. должен доходить разработчик того или иного бизнес-процесса. Почему он не может оперировать классами бизнес-модели или байтами в файлах? разработчику бизнес-процесса в это вникать не обязательно. В этом топике речь идет о разработке бизнес-логики. Это немного разные уровни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:05 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey, ниже картинка иллюстрирует уровни абстракции. Сверху - Бизнес-процесс реализации (1). Ниже бизнес логика, реализующая элементы БП. Один из элементов - обработка документов фактической отгрузки, получаемых из системы R/3 (2). Из обработка выполняется функцией (3). Для этого сервер приложений использует процедуру СУБД (4). В СУБД выполняется непосредственная обработка данных (5). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:35 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyДля разработчика бизнес-функций это выглядит, как "Товар.Зарезервировать(количество)". И проблем с пониманием того, что эта запись означает ни у кого не возникает.Знакомо. Сейчас как раз занимаюсь оптимизацией того, что с делают с базой некоторые среды, предоставляющие разработчику те самые Товар.Зарезвировать(). :) Вот странно, на заре Дельфи, тех, кто делал на ней программы не задумываясь, как именно они работают, называли нехорошими словами. :) Сейчас это мейнстрим. И ни у кого никаких нареканий не вызывает. :) Хотя и сейчас еще считается, что опытный программист подбирает для решения задачи наиболее оптимальный инструмент... А как его можно выбрать, не задумываясь о том что этот инструмент конкретно делает? Не до пакетов в сети, конечно. И не до байтов в памяти, и не до секторов на диске, но хотя бы иметь представление-то надо, иначе это не профессионал, а "формоклепатель" какой-то, как раньше про Дельфийцев и говорили... :) Не имею ввиду лично Вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:38 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Егоров Александр, Для этого есть очень ёмкое название: 1С-нег :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:46 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Егоров АлександрИ не до байтов в памяти, и не до секторов на диске, но хотя бы иметь представление-то надо, иначе это не профессионал, а "формоклепатель" какой-то, как раньше про Дельфийцев и говорили... :) Да, хороший программист должен не только уметь использовать какие-то вещи, но и понимать как они работают. Но к сожалению, хороших программистов (также как и хороших специалистов в любом деле) очень мало. Большинство занимающихся разработкой - просто тихо делают свою работу без претензий на гениальность. И выбирая арихтектуру серьезного проекта нужно ориентировться именно на эту массу - именно они будут реализовывать в этом проекте разные бизнес-функции, дорабатывать, кастомизиировать и внедрять. Любая архитектура позволяет наисать плохое приложение, но некоторые подходы позволяют минимизировать ущерб от кривых рук. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:51 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey, Точно, именно поэтому я негативно отношусь к технологиям типа Hibernate, т.к. те, кто ее использует (я имею ввиду прикладников) зачастую не знают, как оптимально писать запросы к базе, абстрагируясь от нее, и тогда на выходе получаем кучу проблем с тормозами в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 11:59 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey, В таком случае лучше всю логику помещать или в хранимые процедуры или давать прикладникам уже готовые методы без возможности заглядывания внутрь (черный ящик). Тогда точно не напортачат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 12:01 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Old Nickдавать прикладникам уже готовые методы без возможности заглядывания внутрь (черный ящик).Это называется инкапсуляция и вляется одним из столпов объектного программирования. Собственно об этом я уже и пмшу третью страницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 12:32 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyOld Nickдавать прикладникам уже готовые методы без возможности заглядывания внутрь (черный ящик).Это называется инкапсуляция и вляется одним из столпов объектного программирования. Собственно об этом я уже и пмшу третью страницу. Бизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 14:41 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Не HibernateБизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись. без ООП в части реализации DAL, интерфейсов и т.п. - действительно не обойтись, в наше то время. А для БЛ - нужно еще придумать ОО надстройку "сверху" на готовую БЛ, т.е. сделать дополнительно . Зато красиво с программистской точки зрения, типа. Насчет упрощения разработки уже было раньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 16:11 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
iscrafmНе HibernateБизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись. без ООП в части реализации DAL, интерфейсов и т.п. - действительно не обойтись, в наше то время. А для БЛ - нужно еще придумать ОО надстройку "сверху" на готовую БЛ, т.е. сделать дополнительно . Зато красиво с программистской точки зрения, типа. Насчет упрощения разработки уже было раньше. Нет готовых надстроек на все случаи жизни. Зачем нужно еще "сверху" какое-то ОО? Реализуем ЗерезервироватьТовар с помощью того, что проще и забываем про детали. За счет возможности выбора наиболее оптимальных способов и готовых низкоуровневых универсальных частей, упрощается разработка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 16:59 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyДа, хороший программист должен не только уметь использовать какие-то вещи, но и понимать как они работают. Но к сожалению, хороших программистов (также как и хороших специалистов в любом деле) очень мало. Большинство занимающихся разработкой - просто тихо делают свою работу без претензий на гениальность. И выбирая арихтектуру серьезного проекта нужно ориентировться именно на эту массу - именно они будут реализовывать в этом проекте разные бизнес-функции, дорабатывать, кастомизиировать и внедрять. Любая архитектура позволяет написать плохое приложение, но некоторые подходы позволяют минимизировать ущерб от кривых рук. По сути - согласен. С выделенным - не очень :) На мой взгляд, серьезный проект требует пристального внимания как раз к мелочам. Иначе это может обернуться неожиданными провалами, если условия использования продукта будут хоть немного отличаться от проверенных разработчиком. Хотя в случае с бизнес-приложениями это тоже может не спасти, ведь бизнес меняется достаточно часто. Если продукт узкоспециализированный или даже эксклюзивный - один вариант. Сказал клиент - "максимум 10 заявок", проверили, как ведет себя архитектура на 50-ти - можно спокойно внедрять. Но как быть, если продукт позицируется как массовый? Если у одного заказчика будет максимум 10, а у другого минимум 3000? Не зная архитектуры проверять такое можно только тестированием, а это действительно дополнительные расходы разработчику. Да и не факт что можно протестировать все возможные нагрузки и условия у клиентов. Зная - можно заранее предположить, где и когда возникнут узкие места, и фокусироваться на них (в т.ч. и приглашая дополнительных узких специалистов) по мере приближения к их пределам без остановки развития проекта на других слоях. Сейчас пришла мысль - а ведь хорошее знание архитектуры как раз и позволяет увидеть в ней определенные слои. То, что с виду кажется монолитным Hibernate - на самом деле такой же "слоеный пирог". Там внутри есть и "прямая работа с БД", есть "бизнес-логика", описывающая правила проекции таблицы в объект и "бизнес-функции" манипулирования этим объектом. Есть "уровень представления", который и использует конечный пользователь разработчик... Еще пример - "слоеность" современных ОС. "Приложение -> ОС - драйвер -> железо". Более верхний "слой" инкапсулирует более нижний, но возможность работать с каждым слоем позволяет писать программы как используя только доступные API операционки, так и ориентированные на специализированную низкоуровневую обработку железом. Главное - что есть такая возможнось. Фотошоп работает на любой видеокарте, а Doom3 - нет. Но ведь чтобы поиграть совсем необязательно ставить какую-то специальную ОС... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 18:09 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
Old NickДля этого есть очень ёмкое название: 1С-нег :-) Не провоцируйте :) 1Сник - это прикладной программист на платформе 1С. Как правило, хорошо разбирающийся еще и в предметной области, помимо программирования. И умеющий обходить ограничения этой платформы. ;) А ёмкое название - это конфигурас :) Они, кстати, бывают и платформонезависимыми ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 18:21 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
SilverlightiscrafmНе HibernateБизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись. без ООП в части реализации DAL, интерфейсов и т.п. - действительно не обойтись, в наше то время. А для БЛ - нужно еще придумать ОО надстройку "сверху" на готовую БЛ, т.е. сделать дополнительно . Зато красиво с программистской точки зрения, типа. Насчет упрощения разработки уже было раньше. Нет готовых надстроек на все случаи жизни. Зачем нужно еще "сверху" какое-то ОО? Реализуем ЗерезервироватьТовар с помощью того, что проще и забываем про детали. За счет возможности выбора наиболее оптимальных способов и готовых низкоуровневых универсальных частей, упрощается разработка. Вы это не мне говорите. Я об этом с самого начала этой беседы вроде как говорю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 18:55 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
VoDAiscrafmуточните плз, чем отличаются сущности Заказчик, Корпоративный заказчик, Средний, Маленький и т.п. в принципе и чем у них отличается процедура отправки счета, в частности. С ХП это конечно не в тему, СУБД счета не отправляет.если вы хотите перенести БЛ на СУБД, то СУБД обязана отправлять счета. отправка счета это БЛ. iscrafmпопытался найти связь аудита действий пользователей с бизнес-логикой, сходу не получилось. Давайте более бизнес-логичные примеры обсуждать.эм... а почему аудит у вас не БЛ? Бизнес-логика это логика системы требуемая для работы компании. Т.е. по сути БЛ это ВСЕ что хочет получить заказчик и за что он платит. iscrafmестественно не должна. Она и не знает. Банальная валидация ввода.Валидация ввода это тоже БЛ. И кто же должен ее реализовать? А главное ГДЕ? Рассуждения подобного рода занимают почти весь топик. Грустно. Коллеги (все участники темы), ваш спор пошёл от того, что вопрос о том, должна ли распологатиься бизнес-логика в БД, НЕКОРЕКТЕН и обсуждать его в такой постановке безсмысленно. Объясняю. Система управления базами данных специализируется на управлении базами данных, поэтому делает это в общем случае это априри эффективнее. Но, не всякая логика требует средств СУБД. Вывод: на хранимые процедуры СУБД переносится ТОЛЬКО логика, которая относится к обработке данных хранимых в БД. Поэтому очень не стоит переносить на ХП логику игры Quake (непрофильное использование, хотя практически возможное!), как очень стоит переносить на ХП работу с данными, которые хранятся в БД (профильное использование). А за программирование масовой обработки данных из БД на уровне сервера приложений первый раз нужно предупреждать, а второй - увольнять. Лично у нас принято правило: "все обращения к БД только через ХП", а это кардинально отличается по смыслу от "вся бизнес-логика на ХП". Удачи, коллеги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 00:19 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
web_foxЛично у нас принято правило: "все обращения к БД только через ХП", а это кардинально отличается по смыслу от "вся бизнес-логика на ХП". Можете обосновать это правило какими-нибудь разумными, нерелигиозными причинами? Почему вызов insertTable(id=>1,label=>'one') лучше, чем insert into table(id, Label) values(1,'one') ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 14:49 |
|
||
|
Где должна лежать бизнес-логика в мнгоуровневом приложении
|
|||
|---|---|---|---|
|
#18+
web_fox Лично у нас принято правило: "все обращения к БД только через ХП", а это кардинально отличается по смыслу от "вся бизнес-логика на ХП". +1 БЛ в ХП - полнейший изврат Шайтан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 15:28 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36451286&tid=1542824]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 437ms |

| 0 / 0 |
