|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
Добрый день! Хотел бы обсудить пару интересующих меня моментов, касающихся проектирования бизнес-логики приложения. Для примера возьму существующее веб-приложние (asp.net, хотя вряд ли технология тут имеет значение) среднего масштаба (~70 таблиц в БД, планируются большие объемы данных, десятки, позже сотни пользователей). Имеются выделенные слои UI, BLL, DAL. Имеют место интеграция с другими системами (веб-сервисы, выгрузка-загрузка из файлов). На текущий момент я вижу несколько основных проблем: 1) Жизненный цикл бизнес-объекта. Он может быть создан, изменен или удален через: UI вручную (причем несколькими способами), автоматически в рамках какого-то другого действия, "импортирован" из файла. Эти операции затрагивают другие объкеты - они могут быть созданы, изменены или удалены вместе с текущим. Проблема: Ее совсем понятно, как на уровне классов организовать работу с таким объектом. В данный момент имеется класс-помойка, в котором есть группы действий вроде AddFromUI, AddFromFile,..., UpdateFromUI, UpdateSomeStatus,... И еще куча дополнительных методов. Получается, слишком большой класс. Можно было бы разделить его на несколько классов, но тогда эти классы были бы очень сильно связаны между собой. 2) Поиск набора объектов - ну очень хочется сделать какую-то абстракцию (вроде IFinder<T>), однако, ищутся разные объекты по разным полям... Проблема: Куча классов-"поисковиков" (примерно равная кол-ву разных типов бизнес-объектов), не имеющих ничего общего между собой, в результате сильно повышается зависимость BLL от DAL. 3) Валидация объекта при создании из UI. Основная валидация находится в BLL, однако, для удобства пользователя иногда нужно делать "быструю" валидацию средствами JavaScript (например, у объекта есть 2 поля-даты, одно должно быть всегда больше другого, или поле должно соответствовать регулярному выражению - пользователь ввел, сразу видит ошибку без лишних нажатий кнопок). Проблема: Дублирование кода при простой реализации, не очень оправданное усложнение при попытке сделать через Ajax + валидация в BLL. 4) Вывод разных списков объектов - asp.net предлагает удобное решение с поддержкой сортировок, paging и т.п., в моем случае это все делается средствами СУБД Проблема: в результате имеем тут совсем не объектно-ориентированный подход, без использования бизнес-объектов. По сути BLL в этом случае нужен только чтобы формально не делать связку UI-DAL. Как результат - повсеместный ввод названий полей БД вручную, необходимость иногда писать "хитрые" запросы чтобы вывести какие-то вычислимые данные. Прошу всех высказывать свои советы по тому, как вам приходилось разрешать подобные проблемы (или какие еще проблемы бывали) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2011, 11:12 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80....Жизненный цикл бизнес-объекта...как на уровне классов организовать работу с таким объектом... я возможно не до конца чуствую вашу специфику, но кмк бизнес объекты - самые статичные сущности в проекте.(на то они и бизнес объекты - т.е. суть бизнеса не меняется.) если у вас обратное - то скорее всего проблемы с консерваторией. косвенно это подтверждается вашими "классами-помойками", "взаимодетйствие с удаляемыми" и т.д.. пример: почтальён перемещается по городу и разносит письма... сущности всегда будут: инициатор работы населённый пункт перемещаемый объект обзывать можно по разному - рояли не много поменяется... если, что то поменяется из выше перечисленных - увы это уже не почтальён разносящий посылки и письма... т.е. почтальён никогда не превратиться в киску пьющую молоко. ну никак!!!! Если вы всё вышесказанное прочуствуете, то тогда собственно и вопросов про связи при удалении, как работать, дубляж кода и иже - отпадут сами собой... Если, что то отпадает - значит в жизни происходит эволюция. Т.е. у пачтольёна вместо велосипеда - появился авто. разносит не только письма но и посылки. появились глаголы - показать квитанцию, подписать, слетать на луну и т.д... т.е. изменения в жизни самой бизнес логики НЕ МОЖЕТ происходить быстрее чем жизненный цикл программы (или хотя бы одной итерации: анализ-программирование-тестирование-заказчик). удачи вам (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2011, 14:08 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80, "...По сути BLL в этом случае нужен только чтобы формально не делать связку UI-DAL. Как результат - повсеместный ввод названий полей БД вручную, необходимость иногда писать "хитрые" запросы чтобы вывести какие-то вычислимые данные." может для вашего случая выделение слоев BLL и DAL лишнее - достаточно ограничиться стандартными средствами ASP.NET? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2011, 22:38 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
kolobok0, +1 аффтар, между автоматизацией предметной области и созданием конструктора Предметных областей - большая разница. Не берите слишком широко. Моделируйте упрощённую модель только по ТЗ с ограниченимия http://www.databaseanswers.org/data_models/ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2011, 11:10 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
kolobok0я возможно не до конца чуствую вашу специфику, но кмк бизнес объекты - самые статичные сущности в проекте... Наверное, я немного неверно выразился - в изначальном сообщении имелись ввиду конкрентые экземпляры бизнес-объектов (конкретная посылка, конкретный почтальон и т.п.), они как раз могут создаваться-удаляться и подвержены определенной динамике... И именно с ними и возникает проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2011, 11:47 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80, Есть развилка в архитектуре: - БЛ в БД - ссылку на модель я дал - БЛ в аппсервере в ОРМ Вы похоже, хотите совместить несовместимое ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2011, 15:05 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80...имелись ввиду конкрентые экземпляры бизнес-объектов (конкретная посылка, конкретный почтальон и т.п.), они как раз могут создаваться-удаляться и подвержены определенной динамике.... экземпляры объектов = инстанцы, могут создаваться и удаляться в процессе работы(жизни) приложения. а причём тут архитектура то? если вы ведёте речь о том что вы описываете конкретного почтальёна(или посылку), а потом вдруг (по бизнес задачи) он плавно превращается в кошку пьющую молоко - то тогда сущность почтальён = не удачно подобрана. Тут наверное уже ближе млекопетающее, либо живое существо, либо одушевлённая сущность... И это тогда логично ложиться в идею модернизировать(по бизнес задаче) почтальёна в таракана а не кошку... если идёт речь про отображение сущностей на БД (заметьте это отдельное направление, тема) - то тут лучше использовать все плюсы БД, а не гоняться за "правильностью" решения. Другое дело, что оптимальней всего (как правило) оказываются "правильные" решения :) или опять Вы не то имели ввиду? :) (круглый) ЗЫ Вы лучше на пальцах, поближе к вашей задаче :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2011, 18:53 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
да не в архитектуре проблемы, надо просто понять уровень системы, и сделать "сдесь и сейчас", а дальше видно будет ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2011, 23:01 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
Почему-то, всех сразу захватил только первый пункт исходного поста... Наверное, тут действительно имеет место "плавно превращается в кошку пьющую молоко". Т.е. имеет место сущность, явно используемая для разных целей в зависимости от контекста. А как вы поступаете с остальными пунктами? Petro123, Имеется ввиду БЛ на апп сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2011, 17:07 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80, есть 2 вида маппинга сущности в РСУБД - сущность - класс на таблицу - сущность класс на строку таблицы. В обоих случаях основная трудность найти общее в классах (скульптор отсекает лишнее). Тогда все экземпляры кошек - похожи между собой. 3-х звенка развращает в лёгкости раздувания модели. Либо проектируй сначала в ограничениях РСУБД, либо на UML и кошках в ООП. авторНа текущий момент я вижу несколько основных проблем: 1) Жизненный цикл бизнес-объекта. Он может быть создан, изменен или удален через: ==== не он, а Экземпляр - строка 2) Поиск набора объектов - ну очень хочется сделать какую-то абстракцию (вроде IFinder<T>), однако, ищутся разные объекты по разным полям... ====== ОРМ ищет автоматом по коллекции Проблема: Дублирование кода при простой реализации, не очень оправданное усложнение при попытке сделать через Ajax + валидация в BLL. ==== хош красиво - дублируй. Это работа программиста. Хотя тут был спор.... есть средства...на конечном этапе! 4) в моем случае это все делается средствами СУБД ======= ты ж сказал БЛ в БД нету? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 00:34 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80Почему-то, всех сразу захватил только первый пункт исходного поста... Наверное, тут действительно имеет место "плавно превращается в кошку пьющую молоко". Т.е. имеет место сущность, явно используемая для разных целей в зависимости от контекста. А как вы поступаете с остальными пунктами? вводи сущности, определяем контексты, задаем нтерпретацию сущности в контексте ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2011, 14:16 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
donkey80, 4) ввожу view и стараюсь как можно меньше данных редактируемых представлять в табличном виде. Условно: Entity - стандартная сущность и берет данные из таблицы entity EntityList - сущность для таблицы или списка и берет данные из View:entityView А можно обратиться к JPA(я честно не знаю как там в asp,net с мутантами вроде hibernate) $) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2011, 16:49 |
|
Проблемы в архитектуре
|
|||
---|---|---|---|
#18+
решаю похожую задачу, но проблема не с архитектурой, а с неймингом :) Есть объекты, у которых есть разнообразные поля, "составные части" Вопрос в том, как правильно назвать эти элементы объекта: Entity, Property, Field, Unit, .. Cell, Part, Half.. ? User: user.name user.login user.avatar ... user.last_visit Post: post.title post.preview post.body ... Pro pro.title pro.description pro.preview и т.д. Всё это хранится в разных местах (в нескольких таблицах, некоторые данные динамические). Работа с ними налажена: права, редактирование, валидация, вывод. Вопрос именно в названии. Хочется выбрать наиболее подходящее название для всего этого семейства: понятное, лаконичное. Возможно есть устоявшийся термин, но мне он неизвестен :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2012, 12:18 |
|
|
start [/forum/topic.php?fid=33&msg=37587367&tid=1547924]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 435ms |
0 / 0 |