powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Архитектура приложения, надо ли дублировать сущности под каждый слой
25 сообщений из 295, страница 1 из 12
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085289
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моем понимании схема проекта должна быть такой:



Получается в данной схеме на одну сущность БД (Entity) мы дважды дублируем данную сущность для других слоев - для BLL и для слоя приложения.

1) Правильно ли я все понимаю схему
2) допускается ли наследование DataModel От Entity или лучше независимые классы создать
3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085308
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest,

лучше использовать модель , а остальное пофиг
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085311
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
назовите:
DataModel - DTO

Model - ViewModel

BLLayer - DataService

и по схеме:

DTO от Entity не зависит, Entity может вообще отсутствовать

DataService и Repository зависит от DTO
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085314
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest2) допускается ли наследование DataModel От Entity или лучше независимые классы создать

только независимые
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085315
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую

можно, но я не видел ни одного проекта, когда это дало бы профит
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085319
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawblest3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую

можно, но я не видел ни одного проекта, когда это дало бы профит
а какие ты проекты воще видел? (давай погавкаемся)
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085325
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoskmawпропущено...


можно, но я не видел ни одного проекта, когда это дало бы профит
а какие ты проекты воще видел? (давай погавкаемся)

на такой чОткий вопрос так сразу и не ответишь.
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085328
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw,

ну давай почетче
что там ДатаМодел и что там ентити
и почему чувиха хочет датамодел из ентити наследовать?
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085331
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoskmaw,

ну давай почетче
что там ДатаМодел и что там ентити
и почему чувиха хочет датамодел из ентити наследовать?

"и почему чувиха хочет датамодел из ентити наследовать" - он думает, что это копипаст. он заблуждается. пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class SomeEntity
{
public long Id {get; set}
public IList<SomeEntity1> List {get; set}
}

class SomeDTO
{
public long Id {get; set}
public IList<SomeDTO11> List1{get; set}
public IList<SomeDTO12> List2{get; set}
public IList<SomeDTO13> List3{get; set}
}


где,

Код: c#
1.
2.
3.
class SomeDTO11: SomeDTO1
class SomeDTO12: SomeDTO1
class SomeDTO13: SomeDTO1
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085338
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosлучше использовать модель , а остальное пофиг

читал твои мысли в разных топиках на эту тему. ты вкладываешь в этот термин свое ViPRos-вское понятие модели. тут все более прозаично
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085373
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично я так и делаю.
в солюшене есть проект слоя данных, в нем все сущности базы и сервисы для загрузки,
в другом проекте поставщики данных (Provider), классы которые используя серверы предоставляют доступ к observable коллекциям, обновляют их и т.д.
в третьем проекте модели представления и как правило сразу же рядом с ними View'и (XAML ресурсы, без CodeBehind, я использую только шаблоны (DataTemplate), стили и если надо спец. панели и контролы, но часто панели и контролы тоже выношу в отдельный проект.
После этого, остается только в ViewModel получить из поставщика нужную коллекцию, из поставщика я уже получаю объекты для ViewModel, а о слое данных ViewModel особо и не в курсе. По сути Provider'ы, это часть ViewModel'и но вынесенная отдельно.
Мне так удобно, во первых. Мне не нужно париться об обновлении данных в ViewModel, так как всё это вынесено в Provider'ы, провайдер сам создает ObservableCollection<T>, сам регулярно подключается к базе и проверяет, не обновился ли список, вставляет и удаляет записи и создает. Делается всё это при помощи сервисов
Да писать приходится больше, но в дальнейшем я только выигрываю.:
а) сервисы для загрузки из бд у меня универсальные и сделаны на базе рефлексии, то есть загрузка происходит автоматом, нужно только для класса определяющего сущность записи бд прописать нужные аттрибуты или задать правильно имена свойство по полям.
Если я работаю с БД.
б) загрузка данных происходит только 1 раз, разные модели представления могут получить доступ к одному поставщику данных, мне не надо каждый раз заботится о всех сопутствующих проблемах.

Как по мне, делать нужно так, как удобно и легко.
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085374
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blest1) Правильно ли я все понимаю схему

Если под «правильно» понимается «мы дважды дублируем данную сущность», то нет. Ибо, что такое сущность? Табличка в базе данных? Сущность в контексте репозитория / ORM, отражает то, как данные хранятся, немного скрывая свою реляционную природу. В теории, сущности могут лежать вовсе не в реляционной структуре, а в какой-нибудь NoSQL, или ещё где-то, и нам это должно быть не важно. Но это всё лирика, и лежит в плоскости более практичной — мы прекрасно знаем где и как данные будут лежать, всё что слой доступа к данным делает, это типизирует эти данные, ну и немного (совсем немного), скрывает конкретику природы хранилища. Т.е. MS SQL мы можем заменить на какой-нибудь Oracle, и это должно прокатить.

А под DataModel понимается скорее всего DTO — это конкретные кортежи данных, которые вовсе не обязаны соответствовать табличкам. Например, у тебя есть некий грид и 10 колонок, чтобы их получить, надо собрать данные из 5 таблиц, вот и выбирай: либо 5 сущностей, либо 1 DTO. А как 5 сущностей превратить в 1 DTO? Ответ — проекция, чувак. Проекция! :)

В общем, ответ на первый вопрос: скорее нет, чем да.

blest2) допускается ли наследование DataModel От Entity или лучше независимые классы создать

Нет! Не допускается. Даже не вижу смысла отвечать на вопрос «почему?», ведь эти классы служат совершенно разным целям и решают разные задачи.

blest3) Всегда ли придерживаться данной модели даже для небольших проектов или можно пропускать некоторые элементы (скажем DataModel можно не использовать) - по феншую

Можно со временем состряпать свой некий bootstrapper, который будет содержать каркас, с которым удобно работать. Если каркас получился удачным, то большая часть предметной области может в него удобно лечь. Ну а это уже приходит с опытом. Ну и задачи со временем становятся довольно таки однотипными.
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085377
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesлично я так и делаю.
в солюшене есть проект слоя данных, в нем все сущности базы и сервисы для загрузки,
в другом проекте поставщики данных (Provider), классы которые используя серверы предоставляют доступ к observable коллекциям, обновляют их и т.д.
в третьем проекте модели представления и как правило сразу же рядом с ними View'и (XAML ресурсы, без CodeBehind, я использую только шаблоны (DataTemplate), стили и если надо спец. панели и контролы, но часто панели и контролы тоже выношу в отдельный проект.
После этого, остается только в ViewModel получить из поставщика нужную коллекцию, из поставщика я уже получаю объекты для ViewModel, а о слое данных ViewModel особо и не в курсе. По сути Provider'ы, это часть ViewModel'и но вынесенная отдельно.
Мне так удобно, во первых. Мне не нужно париться об обновлении данных в ViewModel, так как всё это вынесено в Provider'ы, провайдер сам создает ObservableCollection<T>, сам регулярно подключается к базе и проверяет, не обновился ли список, вставляет и удаляет записи и создает. Делается всё это при помощи сервисов
Да писать приходится больше, но в дальнейшем я только выигрываю.:
а) сервисы для загрузки из бд у меня универсальные и сделаны на базе рефлексии, то есть загрузка происходит автоматом, нужно только для класса определяющего сущность записи бд прописать нужные аттрибуты или задать правильно имена свойство по полям.
Если я работаю с БД.
б) загрузка данных происходит только 1 раз, разные модели представления могут получить доступ к одному поставщику данных, мне не надо каждый раз заботится о всех сопутствующих проблемах.

Как по мне, делать нужно так, как удобно и легко.

судя по вашему описанию, фигня какая-то. удобно только вам
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085379
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesПо сути Provider'ы, это часть ViewModel'и

какой-то бред
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085380
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМожно со временем состряпать свой некий bootstrapper

ViPRos
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085382
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawhVosttМожно со временем состряпать свой некий bootstrapper

ViPRos

Нет, ВИПРОС это очердной замес на тему вечного двигателя и серебряной пули.

Типа.

А что, если нам заморочиться, и сделать такую волшебную хренобазу, в которой всё при всё создаётся без участия программистов? Сущности? Определяются на уровне данных, клац по кнопке, определил поля -- и готово! А вся при вся бизнес-логика тоже определяется на уровне данных, клац по кнопке, определил некий Workflow -- и готово! Вот сделать это всё и разогнать всех программистов к чёртовой матери. Путь идут пасутся, так как программисты больше не нужны. Нужен лишь один ВИПРОС и талмуд. =)

А начинали подобные движения ещё сопливые немцы в будущей мегакорпорации SAP. И таки добились успехов. При чём не в реализации подобного, а в продажах.

Так что всё впереди, готовьтесь программеры, ваш век подходит к концу
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085386
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttмегакорпорации SAP

мстят за Сталинград
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085629
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо большое за ответы, ясность наступила.
kmaw отдельное спасибо за исправления в схеме.
Я только эту зависимость не понял

kmawRepository зависит от DTO


Если не сложно - каким образом DAL зависит от DTO ?
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085667
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blestВсем спасибо большое за ответы, ясность наступила.
kmaw отдельное спасибо за исправления в схеме.
Я только эту зависимость не понял

kmawRepository зависит от DTO


Если не сложно - каким образом DAL зависит от DTO ?

предпочитаю, чтобы репозитории возвращали и принимали только DTO, чтобы дальше репозиториев Entity не выходили
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085677
blest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawпредпочитаю, чтобы репозитории возвращали и принимали только DTO, чтобы дальше репозиториев Entity не выходили

ну в целом я так и думал. Но в таком случае описывать необходимо каждый репозиторий вручную (имею ввиду генериковое стандартное описание не подойдет) ?!
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085685
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawпредпочитаю, чтобы репозитории возвращали и принимали только DTO, чтобы дальше репозиториев Entity не выходили

репо получает и отдаёт Entity, DTO получают/отдают дата-сервисы, иначе репо быстро превратится в God Object и потянет на себя бизнес-логику, чего категорически надо избегать.

у репы банальная, и тупейшая в мире задача -- скрыть от остальной части ПО способ доступа к данным, Entity это у же и есть по сути DTO, только между миром БД и внутренней кухней ПО. зачем городить огород?

DTO хороши, чтобы отдавать только то, что нужно. например, в Entity может быть сотня полей, плюс связи всякие. а сервису нужен только десяток и чуток полей из связей.

сервису нафиг не упало получать отмаппленный по все помидоры Entity со всей сотней полей. для чего? ублажить Идею супер-мега-слоёного разделения? в погонях за красивыми картинками и схемками, люди частенько отдаляются от реальности и реальных задач примерно на пару парсеков.
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085786
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttрепо получает и отдаёт Entity

такой вариант, наверное, для самых простых справочников "Id Name" годится. так как:
отдаёт
в подавляющем большинстве случаев возвращается join и проекция. да, там уже может быть некоторая логика типа decode (да и сложнее), но это, по-моему, неизбежно (причем, это может быть SQL).
получает
то, что принимается, - это также DTO по сути , даже если это класс Entity - {Id + набор свойств, по которым задается состояние объекта}. все равно придется объект сначала загрузить/создать, установить его состояние, а потом уже сохранить (причем, это может быть SQL).

исходя из вышеперечисленного и следуют мои предпочтения.
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085797
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawтакой вариант, наверное, для самых простых справочников "Id Name" годится

глупости какие-то, ты меня не услышал, но я повторю:

задача репо -- скрыть способ доступа к данным от остальной части ПО. репо великим русским языком -- это ХРАНИЛИЩЕ. а хранит он там Entity. соответственно, в задачи репо входит отдавать и принимать Entity, а не какие-то там DTO.

поверх репо пилится дата сервисы (для анемичной модели данных), которые уже принимают и отдают DTO, и ПО работает с дата сервисами. да, Entity в идеале за пределами дата сервисов уже не видна.

резюмирую: не надо сваливать на репо то, чем он не должен заниматься. репо не обязано знать ни о каких DTO, не должно заниматься маппингом и прочим. у него маленькая область ответстенности, и не надо на него сваливать что-то там ещё.
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085819
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttkmawтакой вариант, наверное, для самых простых справочников "Id Name" годится

глупости какие-то, ты меня не услышал, но я повторю:

задача репо -- скрыть способ доступа к данным от остальной части ПО. репо великим русским языком -- это ХРАНИЛИЩЕ. а хранит он там Entity. соответственно, в задачи репо входит отдавать и принимать Entity, а не какие-то там DTO.

поверх репо пилится дата сервисы (для анемичной модели данных), которые уже принимают и отдают DTO, и ПО работает с дата сервисами. да, Entity в идеале за пределами дата сервисов уже не видна.

резюмирую: не надо сваливать на репо то, чем он не должен заниматься. репо не обязано знать ни о каких DTO, не должно заниматься маппингом и прочим. у него маленькая область ответстенности, и не надо на него сваливать что-то там ещё.

т.е. так должен выглядеть репозиторий?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public void Add(SomeEntity someObject)
        {
            context.SomeObjects.Add(someObject);
        }

public SomeEntity Get(int id)
        {
            return context.SomeObjects.FirstOrDefault(item => item.Id == id);
        }

public IList<SomeEntity> GetAll()
        {
            return context.SomeObjects.ToList();
        }



тогда нафиг он нужен
...
Рейтинг: 0 / 0
Архитектура приложения, надо ли дублировать сущности под каждый слой
    #39085824
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawт.е. так должен выглядеть репозиторий?

да, примерно так.


kmawтогда нафиг он нужен

сколько раз мне ещё сказать про задачи, которые должен решать репозиторий???
в том виде, как ты указал -- он их решает.
такой репозиторий можно замокать для тестов, можно легко подменить способ хранения данных. что ещё нужно-то? зачем в него какую-то логику ещё пихать? зачем эти ваши DTO вообще? разные части ПО могут требовать сотни разных не связанных DTO и связанной с этим логикой. при этом репозиторию накласть на это, он делает своё маленькое дело и в этом его великая ценность.
...
Рейтинг: 0 / 0
25 сообщений из 295, страница 1 из 12
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Архитектура приложения, надо ли дублировать сущности под каждый слой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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