powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Где должна лежать бизнес-логика в мнгоуровневом приложении
25 сообщений из 318, страница 7 из 13
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36450423
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyЕгоров АлександрЯ сомневаюсь в преимуществе объектно-ориентированной работы с данными в РСУБД используя технологии на базе ORM .Я опять вас не понимаю...Выделил непонятное...
Bogdanov AndreyВообще, что вы называете "работой с данными". У меня ни в одной системе задачи "работы с данными" не возникало. Возникали задачи реализации того или иного бизнес-процесса или "user-case". А что тогда делает Ваша система, например, при обработке бизнес-процесса "принять заявку к исполнению" (внутри которого есть бизнес-функция "зарезервировать товар по заявке"), чтобы результат этого процесса отразился у других пользователей системы?
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451161
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егоров АлександрА что тогда делает Ваша система, например, при обработке бизнес-процесса "принять заявку к исполнению" (внутри которого есть бизнес-функция "зарезервировать товар по заявке"), чтобы результат этого процесса отразился у других пользователей системы?Для разработчика бизнес-функций это выглядит, как "Товар.Зарезервировать(количество)". И проблем с пониманием того, что эта запись означает ни у кого не возникает. А учитывая, что среда еще и сама список доступных методов показывает, то и проблем с написанием тоже. И этот разработчик не задумывается о том, что такое "Товар" - просто идентификатор или какая-то сложная структура, о том что делает метод "Зарезервировать" - просто update, или вызывает Web-сервис и рассылает десяток писем и СМС с предупреждениями
Я утрирую, конечно, но метод "резервировать товар по заявке" я писал несколько лет назад и всех деталей уже не помню.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451200
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyЕгоров АлександрА что тогда делает Ваша система, например, при обработке бизнес-процесса "принять заявку к исполнению" (внутри которого есть бизнес-функция "зарезервировать товар по заявке"), чтобы результат этого процесса отразился у других пользователей системы?Для разработчика бизнес-функций это выглядит, как "Товар.Зарезервировать(количество)". И проблем с пониманием того, что эта запись означает ни у кого не возникает. А учитывая, что среда еще и сама список доступных методов показывает, то и проблем с написанием тоже. И этот разработчик не задумывается о том, что такое "Товар" - просто идентификатор или какая-то сложная структура, о том что делает метод "Зарезервировать" - просто update, или вызывает Web-сервис и рассылает десяток писем и СМС с предупреждениями

жесть конечно, как говорится. Но фоне рассуждений о бизнес-логике, ее устройстве и способах реализации, вдруг всплывают такие подробности. Оказывается разработчики бизнес-логики, понятия не имеют как эта логика работает. Но уверены, что работает круто. Тогда хочется спросить: во время рассказов о скорости разработчки, простоте и прочих чудесах... где скрывались люди, которые пишут внутренности этих самых "Товар.Зарезервировать(количество)"?
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451216
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вставлю свои пять копеек.

Как сделал я когда писал для сети автосалонов. 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. Бизнес-логика

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451267
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmжесть конечно, как говорится. Но фоне рассуждений о бизнес-логике, ее устройстве и способах реализации, вдруг всплывают такие подробности. Оказывается разработчики бизнес-логики, понятия не имеют как эта логика работает. Но уверены, что работает круто. Тогда хочется спросить: во время рассказов о скорости разработчки, простоте и прочих чудесах... где скрывались люди, которые пишут внутренности этих самых "Товар.Зарезервировать(количество)"?Я правильно понимаю, что вы с точностью до байта знаете содержание всех сетевых пакетов, которые идут при выполнении резервирования товара, а также сможете сразу перечислить те сектора на диске в которых произойдут изменения? Или вы все-таки тоже пользуетесь разработками других программистов не влезая досконально в их внутренности?
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451286
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreyiscrafmжесть конечно, как говорится. Но фоне рассуждений о бизнес-логике, ее устройстве и способах реализации, вдруг всплывают такие подробности. Оказывается разработчики бизнес-логики, понятия не имеют как эта логика работает. Но уверены, что работает круто. Тогда хочется спросить: во время рассказов о скорости разработчки, простоте и прочих чудесах... где скрывались люди, которые пишут внутренности этих самых "Товар.Зарезервировать(количество)"?Я правильно понимаю, что вы с точностью до байта знаете содержание всех сетевых пакетов, которые идут при выполнении резервирования товара, а также сможете сразу перечислить те сектора на диске в которых произойдут изменения? Или вы все-таки тоже пользуетесь разработками других программистов не влезая досконально в их внутренности?
нет, сетевые пакеты и секторы на диске меня не интересуют. Утирирование крайне неудачное. Но я с точностью до таблицы, поля в БД, условий, ограничений и т.п. знаю, что делает функция резервирования товара.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451325
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmнет, сетевые пакеты и секторы на диске меня не интересуют. Утирирование крайне неудачное. Но я с точностью до таблицы, поля в БД, условий, ограничений и т.п. знаю, что делает функция резервирования товара.Мне своершенно непонятно почему вы остановились именно на таком уровне абстракции. Вы можете как-то обосновать, то что именно до уровня таблиц, полей и т.п. должен доходить разработчик того или иного бизнес-процесса. Почему он не может оперировать классами бизнес-модели или байтами в файлах?
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451346
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreyiscrafmнет, сетевые пакеты и секторы на диске меня не интересуют. Утирирование крайне неудачное. Но я с точностью до таблицы, поля в БД, условий, ограничений и т.п. знаю, что делает функция резервирования товара.Мне своершенно непонятно почему вы остановились именно на таком уровне абстракции. Вы можете как-то обосновать, то что именно до уровня таблиц, полей и т.п. должен доходить разработчик того или иного бизнес-процесса. Почему он не может оперировать классами бизнес-модели или байтами в файлах?
разработчику бизнес-процесса в это вникать не обязательно. В этом топике речь идет о разработке бизнес-логики. Это немного разные уровни.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451467
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey,

ниже картинка иллюстрирует уровни абстракции.
Сверху - Бизнес-процесс реализации (1). Ниже бизнес логика, реализующая элементы БП. Один из элементов - обработка документов фактической отгрузки, получаемых из системы R/3 (2). Из обработка выполняется функцией (3). Для этого сервер приложений использует процедуру СУБД (4). В СУБД выполняется непосредственная обработка данных (5).
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451474
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyДля разработчика бизнес-функций это выглядит, как "Товар.Зарезервировать(количество)". И проблем с пониманием того, что эта запись означает ни у кого не возникает.Знакомо. Сейчас как раз занимаюсь оптимизацией того, что с делают с базой некоторые среды, предоставляющие разработчику те самые Товар.Зарезвировать(). :) Вот странно, на заре Дельфи, тех, кто делал на ней программы не задумываясь, как именно они работают, называли нехорошими словами. :) Сейчас это мейнстрим. И ни у кого никаких нареканий не вызывает. :) Хотя и сейчас еще считается, что опытный программист подбирает для решения задачи наиболее оптимальный инструмент... А как его можно выбрать, не задумываясь о том что этот инструмент конкретно делает? Не до пакетов в сети, конечно. И не до байтов в памяти, и не до секторов на диске, но хотя бы иметь представление-то надо, иначе это не профессионал, а "формоклепатель" какой-то, как раньше про Дельфийцев и говорили... :)

Не имею ввиду лично Вас.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451500
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егоров Александр,

Для этого есть очень ёмкое название: 1С-нег :-)
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451523
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егоров АлександрИ не до байтов в памяти, и не до секторов на диске, но хотя бы иметь представление-то надо, иначе это не профессионал, а "формоклепатель" какой-то, как раньше про Дельфийцев и говорили... :)
Да, хороший программист должен не только уметь использовать какие-то вещи, но и понимать как они работают. Но к сожалению, хороших программистов (также как и хороших специалистов в любом деле) очень мало. Большинство занимающихся разработкой - просто тихо делают свою работу без претензий на гениальность. И выбирая арихтектуру серьезного проекта нужно ориентировться именно на эту массу - именно они будут реализовывать в этом проекте разные бизнес-функции, дорабатывать, кастомизиировать и внедрять. Любая архитектура позволяет наисать плохое приложение, но некоторые подходы позволяют минимизировать ущерб от кривых рук.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451549
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey,

Точно, именно поэтому я негативно отношусь к технологиям типа Hibernate, т.к. те, кто ее использует (я имею ввиду прикладников) зачастую не знают, как оптимально писать запросы к базе, абстрагируясь от нее, и тогда на выходе получаем кучу проблем с тормозами в базе.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451553
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey,

В таком случае лучше всю логику помещать или в хранимые процедуры или давать прикладникам уже готовые методы без возможности заглядывания внутрь (черный ящик). Тогда точно не напортачат.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36451655
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old Nickдавать прикладникам уже готовые методы без возможности заглядывания внутрь (черный ящик).Это называется инкапсуляция и вляется одним из столпов объектного программирования. Собственно об этом я уже и пмшу третью страницу.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36452142
Не Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov AndreyOld Nickдавать прикладникам уже готовые методы без возможности заглядывания внутрь (черный ящик).Это называется инкапсуляция и вляется одним из столпов объектного программирования. Собственно об этом я уже и пмшу третью страницу.

Бизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36452413
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не HibernateБизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись.
без ООП в части реализации DAL, интерфейсов и т.п. - действительно не обойтись, в наше то время. А для БЛ - нужно еще придумать ОО надстройку "сверху" на готовую БЛ, т.е. сделать дополнительно . Зато красиво с программистской точки зрения, типа. Насчет упрощения разработки уже было раньше.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36452571
Silverlight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmНе HibernateБизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись.
без ООП в части реализации DAL, интерфейсов и т.п. - действительно не обойтись, в наше то время. А для БЛ - нужно еще придумать ОО надстройку "сверху" на готовую БЛ, т.е. сделать дополнительно . Зато красиво с программистской точки зрения, типа. Насчет упрощения разработки уже было раньше.
Нет готовых надстроек на все случаи жизни. Зачем нужно еще "сверху" какое-то ОО? Реализуем ЗерезервироватьТовар с помощью того, что проще и забываем про детали. За счет возможности выбора наиболее оптимальных способов и готовых низкоуровневых универсальных частей, упрощается разработка.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36452721
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyДа, хороший программист должен не только уметь использовать какие-то вещи, но и понимать как они работают. Но к сожалению, хороших программистов (также как и хороших специалистов в любом деле) очень мало. Большинство занимающихся разработкой - просто тихо делают свою работу без претензий на гениальность. И выбирая арихтектуру серьезного проекта нужно ориентировться именно на эту массу - именно они будут реализовывать в этом проекте разные бизнес-функции, дорабатывать, кастомизиировать и внедрять. Любая архитектура позволяет написать плохое приложение, но некоторые подходы позволяют минимизировать ущерб от кривых рук.
По сути - согласен. С выделенным - не очень :) На мой взгляд, серьезный проект требует пристального внимания как раз к мелочам. Иначе это может обернуться неожиданными провалами, если условия использования продукта будут хоть немного отличаться от проверенных разработчиком. Хотя в случае с бизнес-приложениями это тоже может не спасти, ведь бизнес меняется достаточно часто. Если продукт узкоспециализированный или даже эксклюзивный - один вариант. Сказал клиент - "максимум 10 заявок", проверили, как ведет себя архитектура на 50-ти - можно спокойно внедрять. Но как быть, если продукт позицируется как массовый? Если у одного заказчика будет максимум 10, а у другого минимум 3000? Не зная архитектуры проверять такое можно только тестированием, а это действительно дополнительные расходы разработчику. Да и не факт что можно протестировать все возможные нагрузки и условия у клиентов. Зная - можно заранее предположить, где и когда возникнут узкие места, и фокусироваться на них (в т.ч. и приглашая дополнительных узких специалистов) по мере приближения к их пределам без остановки развития проекта на других слоях.

Сейчас пришла мысль - а ведь хорошее знание архитектуры как раз и позволяет увидеть в ней определенные слои. То, что с виду кажется монолитным Hibernate - на самом деле такой же "слоеный пирог". Там внутри есть и "прямая работа с БД", есть "бизнес-логика", описывающая правила проекции таблицы в объект и "бизнес-функции" манипулирования этим объектом. Есть "уровень представления", который и использует конечный пользователь разработчик...
Еще пример - "слоеность" современных ОС. "Приложение -> ОС - драйвер -> железо". Более верхний "слой" инкапсулирует более нижний, но возможность работать с каждым слоем позволяет писать программы как используя только доступные API операционки, так и ориентированные на специализированную низкоуровневую обработку железом. Главное - что есть такая возможнось. Фотошоп работает на любой видеокарте, а Doom3 - нет. Но ведь чтобы поиграть совсем необязательно ставить какую-то специальную ОС... :)
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36452744
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old NickДля этого есть очень ёмкое название: 1С-нег :-)

Не провоцируйте :) 1Сник - это прикладной программист на платформе 1С. Как правило, хорошо разбирающийся еще и в предметной области, помимо программирования. И умеющий обходить ограничения этой платформы. ;)

А ёмкое название - это конфигурас :) Они, кстати, бывают и платформонезависимыми ;)
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36452789
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverlightiscrafmНе HibernateБизнес-логика - существенная часть, но сама по себе она мало интересна. Если разделить все на максимально независимые слои(визуальная часть, БЛ, БО, DAL), то появляется гибкость в членах и действительно упрощается разработка. И без ООП здесь не обойтись.
без ООП в части реализации DAL, интерфейсов и т.п. - действительно не обойтись, в наше то время. А для БЛ - нужно еще придумать ОО надстройку "сверху" на готовую БЛ, т.е. сделать дополнительно . Зато красиво с программистской точки зрения, типа. Насчет упрощения разработки уже было раньше.
Нет готовых надстроек на все случаи жизни. Зачем нужно еще "сверху" какое-то ОО? Реализуем ЗерезервироватьТовар с помощью того, что проще и забываем про детали. За счет возможности выбора наиболее оптимальных способов и готовых низкоуровневых универсальных частей, упрощается разработка.
Вы это не мне говорите. Я об этом с самого начала этой беседы вроде как говорю.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36482467
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDAiscrafmуточните плз, чем отличаются сущности Заказчик, Корпоративный заказчик, Средний, Маленький и т.п. в принципе и чем у них отличается процедура отправки счета, в частности.
С ХП это конечно не в тему, СУБД счета не отправляет.если вы хотите перенести БЛ на СУБД, то СУБД обязана отправлять счета. отправка счета это БЛ.

iscrafmпопытался найти связь аудита действий пользователей с бизнес-логикой, сходу не получилось. Давайте более бизнес-логичные примеры обсуждать.эм... а почему аудит у вас не БЛ? Бизнес-логика это логика системы требуемая для работы компании. Т.е. по сути БЛ это ВСЕ что хочет получить заказчик и за что он платит.

iscrafmестественно не должна. Она и не знает. Банальная валидация ввода.Валидация ввода это тоже БЛ. И кто же должен ее реализовать? А главное ГДЕ?

Рассуждения подобного рода занимают почти весь топик. Грустно.

Коллеги (все участники темы), ваш спор пошёл от того, что вопрос о том, должна ли распологатиься бизнес-логика в БД, НЕКОРЕКТЕН и обсуждать его в такой постановке безсмысленно.

Объясняю. Система управления базами данных специализируется на управлении базами данных, поэтому делает это в общем случае это априри эффективнее. Но, не всякая логика требует средств СУБД.

Вывод: на хранимые процедуры СУБД переносится ТОЛЬКО логика, которая относится к обработке данных хранимых в БД.

Поэтому очень не стоит переносить на ХП логику игры Quake (непрофильное использование, хотя практически возможное!), как очень стоит переносить на ХП работу с данными, которые хранятся в БД (профильное использование). А за программирование масовой обработки данных из БД на уровне сервера приложений первый раз нужно предупреждать, а второй - увольнять.

Лично у нас принято правило: "все обращения к БД только через ХП", а это кардинально отличается по смыслу от "вся бизнес-логика на ХП".

Удачи, коллеги.
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36482996
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxЛично у нас принято правило: "все обращения к БД только через ХП", а это кардинально отличается по смыслу от "вся бизнес-логика на ХП". Можете обосновать это правило какими-нибудь разумными, нерелигиозными причинами?
Почему вызов insertTable(id=>1,label=>'one') лучше, чем insert into table(id, Label) values(1,'one') ?
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36483064
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox Лично у нас принято правило: "все обращения к БД только через ХП", а это кардинально отличается по смыслу от "вся бизнес-логика на ХП".
+1
БЛ в ХП - полнейший изврат

Шайтан
...
Рейтинг: 0 / 0
Где должна лежать бизнес-логика в мнгоуровневом приложении
    #36483080
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее "все обращения к БД только через ХП" полный изврат.
...
Рейтинг: 0 / 0
25 сообщений из 318, страница 7 из 13
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Где должна лежать бизнес-логика в мнгоуровневом приложении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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