|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
В моем понимании схема проекта должна быть такой: Получается в данной схеме на одну сущность БД (Entity) мы дважды дублируем данную сущность для других слоев - для BLL и для слоя приложения. 1) Правильно ли я все понимаю схему 2) допускается ли наследование DataModel От Entity или лучше независимые классы создать 3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 19:23 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
blest, лучше использовать модель , а остальное пофиг ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 19:55 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
назовите: DataModel - DTO Model - ViewModel BLLayer - DataService и по схеме: DTO от Entity не зависит, Entity может вообще отсутствовать DataService и Repository зависит от DTO ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:01 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
blest2) допускается ли наследование DataModel От Entity или лучше независимые классы создать только независимые ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:02 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
blest3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую можно, но я не видел ни одного проекта, когда это дало бы профит ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:04 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmawblest3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую можно, но я не видел ни одного проекта, когда это дало бы профит а какие ты проекты воще видел? (давай погавкаемся) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:06 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
ViPRoskmawпропущено... можно, но я не видел ни одного проекта, когда это дало бы профит а какие ты проекты воще видел? (давай погавкаемся) на такой чОткий вопрос так сразу и не ответишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:12 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmaw, ну давай почетче что там ДатаМодел и что там ентити и почему чувиха хочет датамодел из ентити наследовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:16 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
ViPRoskmaw, ну давай почетче что там ДатаМодел и что там ентити и почему чувиха хочет датамодел из ентити наследовать? "и почему чувиха хочет датамодел из ентити наследовать" - он думает, что это копипаст. он заблуждается. пример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
где, Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:23 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
ViPRosлучше использовать модель , а остальное пофиг читал твои мысли в разных топиках на эту тему. ты вкладываешь в этот термин свое ViPRos-вское понятие модели. тут все более прозаично ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 20:37 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
лично я так и делаю. в солюшене есть проект слоя данных, в нем все сущности базы и сервисы для загрузки, в другом проекте поставщики данных (Provider), классы которые используя серверы предоставляют доступ к observable коллекциям, обновляют их и т.д. в третьем проекте модели представления и как правило сразу же рядом с ними View'и (XAML ресурсы, без CodeBehind, я использую только шаблоны (DataTemplate), стили и если надо спец. панели и контролы, но часто панели и контролы тоже выношу в отдельный проект. После этого, остается только в ViewModel получить из поставщика нужную коллекцию, из поставщика я уже получаю объекты для ViewModel, а о слое данных ViewModel особо и не в курсе. По сути Provider'ы, это часть ViewModel'и но вынесенная отдельно. Мне так удобно, во первых. Мне не нужно париться об обновлении данных в ViewModel, так как всё это вынесено в Provider'ы, провайдер сам создает ObservableCollection<T>, сам регулярно подключается к базе и проверяет, не обновился ли список, вставляет и удаляет записи и создает. Делается всё это при помощи сервисов Да писать приходится больше, но в дальнейшем я только выигрываю.: а) сервисы для загрузки из бд у меня универсальные и сделаны на базе рефлексии, то есть загрузка происходит автоматом, нужно только для класса определяющего сущность записи бд прописать нужные аттрибуты или задать правильно имена свойство по полям. Если я работаю с БД. б) загрузка данных происходит только 1 раз, разные модели представления могут получить доступ к одному поставщику данных, мне не надо каждый раз заботится о всех сопутствующих проблемах. Как по мне, делать нужно так, как удобно и легко. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 21:58 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
blest1) Правильно ли я все понимаю схему Если под «правильно» понимается «мы дважды дублируем данную сущность», то нет. Ибо, что такое сущность? Табличка в базе данных? Сущность в контексте репозитория / ORM, отражает то, как данные хранятся, немного скрывая свою реляционную природу. В теории, сущности могут лежать вовсе не в реляционной структуре, а в какой-нибудь NoSQL, или ещё где-то, и нам это должно быть не важно. Но это всё лирика, и лежит в плоскости более практичной — мы прекрасно знаем где и как данные будут лежать, всё что слой доступа к данным делает, это типизирует эти данные, ну и немного (совсем немного), скрывает конкретику природы хранилища. Т.е. MS SQL мы можем заменить на какой-нибудь Oracle, и это должно прокатить. А под DataModel понимается скорее всего DTO — это конкретные кортежи данных, которые вовсе не обязаны соответствовать табличкам. Например, у тебя есть некий грид и 10 колонок, чтобы их получить, надо собрать данные из 5 таблиц, вот и выбирай: либо 5 сущностей, либо 1 DTO. А как 5 сущностей превратить в 1 DTO? Ответ — проекция, чувак. Проекция! :) В общем, ответ на первый вопрос: скорее нет, чем да. blest2) допускается ли наследование DataModel От Entity или лучше независимые классы создать Нет! Не допускается. Даже не вижу смысла отвечать на вопрос «почему?», ведь эти классы служат совершенно разным целям и решают разные задачи. blest3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую Можно со временем состряпать свой некий bootstrapper, который будет содержать каркас, с которым удобно работать. Если каркас получился удачным, то большая часть предметной области может в него удобно лечь. Ну а это уже приходит с опытом. Ну и задачи со временем становятся довольно таки однотипными. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 21:58 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
Roman Mejtesлично я так и делаю. в солюшене есть проект слоя данных, в нем все сущности базы и сервисы для загрузки, в другом проекте поставщики данных (Provider), классы которые используя серверы предоставляют доступ к observable коллекциям, обновляют их и т.д. в третьем проекте модели представления и как правило сразу же рядом с ними View'и (XAML ресурсы, без CodeBehind, я использую только шаблоны (DataTemplate), стили и если надо спец. панели и контролы, но часто панели и контролы тоже выношу в отдельный проект. После этого, остается только в ViewModel получить из поставщика нужную коллекцию, из поставщика я уже получаю объекты для ViewModel, а о слое данных ViewModel особо и не в курсе. По сути Provider'ы, это часть ViewModel'и но вынесенная отдельно. Мне так удобно, во первых. Мне не нужно париться об обновлении данных в ViewModel, так как всё это вынесено в Provider'ы, провайдер сам создает ObservableCollection<T>, сам регулярно подключается к базе и проверяет, не обновился ли список, вставляет и удаляет записи и создает. Делается всё это при помощи сервисов Да писать приходится больше, но в дальнейшем я только выигрываю.: а) сервисы для загрузки из бд у меня универсальные и сделаны на базе рефлексии, то есть загрузка происходит автоматом, нужно только для класса определяющего сущность записи бд прописать нужные аттрибуты или задать правильно имена свойство по полям. Если я работаю с БД. б) загрузка данных происходит только 1 раз, разные модели представления могут получить доступ к одному поставщику данных, мне не надо каждый раз заботится о всех сопутствующих проблемах. Как по мне, делать нужно так, как удобно и легко. судя по вашему описанию, фигня какая-то. удобно только вам ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 22:02 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
Roman MejtesПо сути Provider'ы, это часть ViewModel'и какой-то бред ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 22:03 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
hVosttМожно со временем состряпать свой некий bootstrapper ViPRos ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 22:11 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmawhVosttМожно со временем состряпать свой некий bootstrapper ViPRos Нет, ВИПРОС это очердной замес на тему вечного двигателя и серебряной пули. Типа. А что, если нам заморочиться, и сделать такую волшебную хренобазу, в которой всё при всё создаётся без участия программистов? Сущности? Определяются на уровне данных, клац по кнопке, определил поля -- и готово! А вся при вся бизнес-логика тоже определяется на уровне данных, клац по кнопке, определил некий Workflow -- и готово! Вот сделать это всё и разогнать всех программистов к чёртовой матери. Путь идут пасутся, так как программисты больше не нужны. Нужен лишь один ВИПРОС и талмуд. =) А начинали подобные движения ещё сопливые немцы в будущей мегакорпорации SAP. И таки добились успехов. При чём не в реализации подобного, а в продажах. Так что всё впереди, готовьтесь программеры, ваш век подходит к концу ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 22:22 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
hVosttмегакорпорации SAP мстят за Сталинград ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2015, 22:30 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
Всем спасибо большое за ответы, ясность наступила. kmaw отдельное спасибо за исправления в схеме. Я только эту зависимость не понял kmawRepository зависит от DTO Если не сложно - каким образом DAL зависит от DTO ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2015, 18:30 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
blestВсем спасибо большое за ответы, ясность наступила. kmaw отдельное спасибо за исправления в схеме. Я только эту зависимость не понял kmawRepository зависит от DTO Если не сложно - каким образом DAL зависит от DTO ? предпочитаю, чтобы репозитории возвращали и принимали только DTO, чтобы дальше репозиториев Entity не выходили ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2015, 20:51 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmawпредпочитаю, чтобы репозитории возвращали и принимали только DTO, чтобы дальше репозиториев Entity не выходили ну в целом я так и думал. Но в таком случае описывать необходимо каждый репозиторий вручную (имею ввиду генериковое стандартное описание не подойдет) ?! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2015, 21:31 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmawпредпочитаю, чтобы репозитории возвращали и принимали только DTO, чтобы дальше репозиториев Entity не выходили репо получает и отдаёт Entity, DTO получают/отдают дата-сервисы, иначе репо быстро превратится в God Object и потянет на себя бизнес-логику, чего категорически надо избегать. у репы банальная, и тупейшая в мире задача -- скрыть от остальной части ПО способ доступа к данным, Entity это у же и есть по сути DTO, только между миром БД и внутренней кухней ПО. зачем городить огород? DTO хороши, чтобы отдавать только то, что нужно. например, в Entity может быть сотня полей, плюс связи всякие. а сервису нужен только десяток и чуток полей из связей. сервису нафиг не упало получать отмаппленный по все помидоры Entity со всей сотней полей. для чего? ублажить Идею супер-мега-слоёного разделения? в погонях за красивыми картинками и схемками, люди частенько отдаляются от реальности и реальных задач примерно на пару парсеков. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2015, 22:20 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
hVosttрепо получает и отдаёт Entity такой вариант, наверное, для самых простых справочников "Id Name" годится. так как: отдаёт в подавляющем большинстве случаев возвращается join и проекция. да, там уже может быть некоторая логика типа decode (да и сложнее), но это, по-моему, неизбежно (причем, это может быть SQL). получает то, что принимается, - это также DTO по сути , даже если это класс Entity - {Id + набор свойств, по которым задается состояние объекта}. все равно придется объект сначала загрузить/создать, установить его состояние, а потом уже сохранить (причем, это может быть SQL). исходя из вышеперечисленного и следуют мои предпочтения. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2015, 12:20 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmawтакой вариант, наверное, для самых простых справочников "Id Name" годится глупости какие-то, ты меня не услышал, но я повторю: задача репо -- скрыть способ доступа к данным от остальной части ПО. репо великим русским языком -- это ХРАНИЛИЩЕ. а хранит он там Entity. соответственно, в задачи репо входит отдавать и принимать Entity, а не какие-то там DTO. поверх репо пилится дата сервисы (для анемичной модели данных), которые уже принимают и отдают DTO, и ПО работает с дата сервисами. да, Entity в идеале за пределами дата сервисов уже не видна. резюмирую: не надо сваливать на репо то, чем он не должен заниматься. репо не обязано знать ни о каких DTO, не должно заниматься маппингом и прочим. у него маленькая область ответстенности, и не надо на него сваливать что-то там ещё. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2015, 13:04 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
hVosttkmawтакой вариант, наверное, для самых простых справочников "Id Name" годится глупости какие-то, ты меня не услышал, но я повторю: задача репо -- скрыть способ доступа к данным от остальной части ПО. репо великим русским языком -- это ХРАНИЛИЩЕ. а хранит он там Entity. соответственно, в задачи репо входит отдавать и принимать Entity, а не какие-то там DTO. поверх репо пилится дата сервисы (для анемичной модели данных), которые уже принимают и отдают DTO, и ПО работает с дата сервисами. да, Entity в идеале за пределами дата сервисов уже не видна. резюмирую: не надо сваливать на репо то, чем он не должен заниматься. репо не обязано знать ни о каких DTO, не должно заниматься маппингом и прочим. у него маленькая область ответстенности, и не надо на него сваливать что-то там ещё. т.е. так должен выглядеть репозиторий? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
тогда нафиг он нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2015, 14:54 |
|
Архитектура приложения, надо ли дублировать сущности под каждый слой
|
|||
---|---|---|---|
#18+
kmawт.е. так должен выглядеть репозиторий? да, примерно так. kmawтогда нафиг он нужен сколько раз мне ещё сказать про задачи, которые должен решать репозиторий??? в том виде, как ты указал -- он их решает. такой репозиторий можно замокать для тестов, можно легко подменить способ хранения данных. что ещё нужно-то? зачем в него какую-то логику ещё пихать? зачем эти ваши DTO вообще? разные части ПО могут требовать сотни разных не связанных DTO и связанной с этим логикой. при этом репозиторию накласть на это, он делает своё маленькое дело и в этом его великая ценность. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2015, 15:17 |
|
|
start [/forum/topic.php?fid=20&fpage=74&tid=1401094]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 150ms |
0 / 0 |