Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / repository & aggregate entity / 25 сообщений из 305, страница 1 из 13
02.12.2017, 14:12
    #39562991
Arpanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Пытаюсь сделать репозиторий для своего учебного проекта, сильно не ориентируюсь, в инете куча примеров и везде Enterprise на ровном месте, который сходу не осилю повторить.

Problem: EntityBaseRepository<Vehicle> Описание транспортного средства
EntityBaseRepository<Paramert> массив параметров бортовой системы, напряжение аккумулятора, уровень GSM сигнала и т.д.

И вот мне понадобилось на клиенте композитный тип как Vehicle + Paramert (последние/текущие данные параметра)
...
Рейтинг: 0 / 0
02.12.2017, 14:25
    #39562994
Arpanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Сорри, случайно отправил не дописав сообщение.

Сейчас я в контроллере собираю этот композитный тип. Хочу сделать красивее. Но не понимаю в общем виде, как это должно выглядеть.
Как правильно делать, это должна быть еще один EntityBaseRepository<>? И типизировать его своим композитным типом?
Хотя полноценный CRUD для этого Entity не нужен, достаточно обыкновенного Read-Only GetAll()

Или сделать еще один метод в EntityBaseRepository<Vehicle> дополнив его выборкой из Parametr?

Или нужно заводить сервис и там из двух EntityBaseRepository собирать свой композитный тип?

или куда можно запрятать этот запрос который бы выдавал результат из двух Entyty? В идеале хотелось бы CQRS, хотя бы в примитивном зачаточном виде. (потому что полноценные примеры я сразу не потяну)
Спасибо.
...
Рейтинг: 0 / 0
02.12.2017, 15:55
    #39563017
pet_trow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
можно сделать и как Вы предложили "заводить сервис и там из двух EntityBaseRepository собирать свой композитный тип" (DTO?). а можно и просто запрос сделать, некоторый IMyQuery, если это результат джоина таблиц БД. запрос сразу вернет DTO как проекцию
...
Рейтинг: 0 / 0
02.12.2017, 16:38
    #39563034
Arpanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
pet_trow, спасибо.

Сколько я читал DDD, я так понял что Repository изначально и должен выдавать Aggregate Root (доменый тип) которым оперирует наша программа. А сами Entity мне по идее в чистом виде и не нужны.
Но во всем примерах стабильно идет реализация на выдачу Entity, и стабильно нет примеров для сложных/комплексных типов.
И я вот не пойму, я неправильно понял идею? Или это в примерах
...
Рейтинг: 0 / 0
02.12.2017, 17:27
    #39563049
pet_trow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Arpanxpet_trow, спасибо.

Сколько я читал DDD, я так понял что Repository изначально и должен выдавать Aggregate Root (доменый тип) которым оперирует наша программа. А сами Entity мне по идее в чистом виде и не нужны.
Но во всем примерах стабильно идет реализация на выдачу Entity, и стабильно нет примеров для сложных/комплексных типов.
И я вот не пойму, я неправильно понял идею? Или это в примерах

сильно вариативно это DDD от проекта к проекту. "А сами Entity мне по идее в чистом виде и не нужны" - да, ибо это уже БД: извлечь по Id, сохранить, удалить. а вот запросы - это отдельная тема, с бизнес-логикой. тут репо не нужен совсем.

Я не спец в DDD (но мнение имею :)) Aggregate Root - это вообще перпендикулярно каким-либо репо. это несколько более высокий уровень абстракции.

Давайте позовем hVost
...
Рейтинг: 0 / 0
02.12.2017, 18:52
    #39563060
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
ArpanxХочу сделать красивее.
Сначала делают до конца пример.
Это методика для обучения.
Дайте ссылку какой пример делаете или откуда списываете.
Там ведь нет наверняка в ГУИ голых сущностей из базы?
...
Рейтинг: 0 / 0
02.12.2017, 19:08
    #39563065
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Arpanx,
Ну и не забывайте, что технологии меняютя в 3-4 года.
Счас вон, oData и Net Core подоспели).
Не говоря о чистом js клиенте.
...
Рейтинг: 0 / 0
02.12.2017, 20:30
    #39563088
Arpanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Ну у меня как раз связка такая ASPNet.Core 2.0 + ORM EF PostgreSQL + Angualr 5.0 и все это работает на Linux Ubuntu

Репозиторий делаю по этому примеру Как самый простой. И тут сразу возник вопрос как, а вернее где и кто это должен реализовать формирование комплексного типа. (построить дерево на основании данных из двух таблиц)

В том то и проблема что не могу найти хороший пример с которого можно было бы содрать. Есть хорошие примеры по Clean Architecture, Гексагональная архитектура, CQRS но они настолько сложные что не могу осознать и повторить у себя, хотя бы до стадии чтобы оно компилировалось.

Сейчас такой банальный вопрос, куда спрятать Join двух Entity и формирование DTO. А еще лучше посмотреть на код.
...
Рейтинг: 0 / 0
02.12.2017, 21:02
    #39563098
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Arpanx,
Ангуляр это значит бизнем логика и контроллёры в JS.
C# тут только тупой REST сервис из БД.
...
Рейтинг: 0 / 0
02.12.2017, 21:03
    #39563100
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
ArpanxJoin двух Entity в ангуляре
...
Рейтинг: 0 / 0
02.12.2017, 21:05
    #39563101
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Arpanx,
Ещё, ангуляр это приложение одной страницы. Я бы советовал не этого типа для обучения.
...
Рейтинг: 0 / 0
02.12.2017, 21:21
    #39563110
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Arpanx,
Net MVC 5
же у вас есть.
Обязательно раскуси MVC с его POST и перерисовкой страницы. А не AJAX.
...
Рейтинг: 0 / 0
03.12.2017, 02:26
    #39563196
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Arpanxpet_trow, спасибо.

Сколько я читал DDD, я так понял что Repository изначально и должен выдавать Aggregate Root (доменый тип) которым оперирует наша программа. А сами Entity мне по идее в чистом виде и не нужны.
Но во всем примерах стабильно идет реализация на выдачу Entity, и стабильно нет примеров для сложных/комплексных типов.
И я вот не пойму, я неправильно понял идею? Или это в примерах

Entity Framework, как и любая другая ORM, не дадут реализовать DDD в полной мере. Потому как с одной стороны, действительно, можно правильно спроектировать модель данных и получить нужные Aggregate Root, с которыми можно работать очень похожим образом на работу с доменом. С другой стороны, нет инкапсуляции, и нет никакой возможности нормально эту инкапсуляцию реализовать, поэтому это всё сплошная мишура. Остаётся только одно единственное понятие: Entity, отсюда и название. Не нужно искать стабильных примеров организации DDD на ORM, их попросту нет.

Entity Framework даёт возможность очень быстро работать с моделью данных со строгой типизацией, что даёт возможность применять LINQ, использовать атрибуты и мощный слой рефлексии поверх всего этого. Но любая динамика даст трещину. Заходите EAV? Приехали. Захотите динамические подзапросы? Привет, костыли на Expandinq expressions!

Идея здесь простая: если у вас имеется конечная хорошо нормализованная модель, подверженная изменениям только в рамках нормализации, можете пилить, и очень быстро выдавать стабильный, понятный и хорошо сопровождаемый результат. Зачастую, этого хватает.
...
Рейтинг: 0 / 0
03.12.2017, 02:28
    #39563197
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
ArpanxСейчас такой банальный вопрос, куда спрятать Join двух Entity и формирование DTO. А еще лучше посмотреть на код.

Зачем их прятать? JOIN это уже само по себе нарушение нормализации, если всё правильно нормализовано и вы живёте в идеальном мире, то JOIN не нужен, до любой сущности можно добраться через сущность, являющейся Aggregate Root
...
Рейтинг: 0 / 0
03.12.2017, 02:33
    #39563198
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Petro123Ну и не забывайте, что технологии меняютя в 3-4 года.

Это неверное утверждение. Технологии не меняются, появляются новые, путём эволюции существующих, или переосмысление и эксперименты. Нельзя закладываться на технологии, которых ещё нет, поэтому помнить об этом бессмысленно совершенно.


Petro123Счас вон, oData и Net Core подоспели).

OData «подоспела» ещё в 2017 году
...
Рейтинг: 0 / 0
03.12.2017, 02:33
    #39563199
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
hVosttPetro123Счас вон, oData и Net Core подоспели).

OData «подоспела» ещё в 2017 году

*в 2007
...
Рейтинг: 0 / 0
03.12.2017, 02:43
    #39563200
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
ArpanxНу у меня как раз связка такая ASPNet.Core 2.0 + ORM EF PostgreSQL + Angualr 5.0 и все это работает на Linux Ubuntu

Репозиторий делаю по этому примеру Как самый простой. И тут сразу возник вопрос как, а вернее где и кто это должен реализовать формирование комплексного типа. (построить дерево на основании данных из двух таблиц)

В том то и проблема что не могу найти хороший пример с которого можно было бы содрать. Есть хорошие примеры по Clean Architecture, Гексагональная архитектура, CQRS но они настолько сложные что не могу осознать и повторить у себя, хотя бы до стадии чтобы оно компилировалось.

Хороших примеров в вакууме не существует. Когда мы проектировали архитектуру нашего последнего и текущего проекта на DDD / CQRS, выяснилось, что имеющиеся реализации фреймворков, библиотек, решений, проектов — нам не подходит ни один, даже на 20%. Но из каждого можно извлечь удачные решения, блестящие обобщения и паттерны. Было прочитано тонна литературы, статей, исследований, изучен досконально код кучи проектов, включая на других языках, и путём изысканий, набития шишек, кучи «первых блинов», был рождён рабочий проект, который даже после всех мытарств не является образцом для подражания и рефакторится раз в 2 недели набегами.

А вы хотите «хороший пример». Максимум что можно найти хорошего, это реализацию какого-нибудь алгоритма. Который влезет на один экран. Далее нужно собирать бест практикс для каждого конкретного случая, накапливать опыт, читать и кодить, кодить, кодить.

Нет никакого примера, который будет ответом на ваши вопросы.
...
Рейтинг: 0 / 0
03.12.2017, 10:01
    #39563220
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
hVosttНет никакого примера, который будет ответом на ваши вопросы.
Со всем согласен кроме этого.
Аффтар! Ответом на ваш вопрос будет Hello wold.
Добвлю imho что это MVC hello world, если вы пишите не кандидатскую или докторскую.
...
Рейтинг: 0 / 0
04.12.2017, 12:01
    #39563583
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Petro123hVosttНет никакого примера, который будет ответом на ваши вопросы.
Со всем согласен кроме этого.
Аффтар! Ответом на ваш вопрос будет Hello wold.
Добвлю imho что это MVC hello world, если вы пишите не кандидатскую или докторскую.

MVC hello world больше вредны, чем полезны.
...
Рейтинг: 0 / 0
04.12.2017, 12:12
    #39563595
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
hVostt,
Тааааак))).
Давай другой на MVC и без пессимизма).
...
Рейтинг: 0 / 0
04.12.2017, 12:15
    #39563597
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Petro123,
Я имеё ввиду пример веб проекта с ГУИ от Net.
Неужели нет такого.
Ангуляр это не базовый школьный пример для шарп программиста.
...
Рейтинг: 0 / 0
04.12.2017, 12:20
    #39563602
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
hVostt,
VS 2015 меню - новый веб сайт.
Итого 4 типа проекта.
Так что без пессимизма).
...
Рейтинг: 0 / 0
04.12.2017, 14:49
    #39563748
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
Petro123Petro123,
Я имеё ввиду пример веб проекта с ГУИ от Net.
Неужели нет такого.
Ангуляр это не базовый школьный пример для шарп программиста.

Не, нету
Проблема школьных примеров, что реальные проекты потом делаются именно вот так, по-школьному.


Petro123VS 2015 меню - новый веб сайт.
Итого 4 типа проекта.
Так что без пессимизма).

Ну начать можно с этого, конечно. Но в итоге всё полностью меняется, так или иначе :)
...
Рейтинг: 0 / 0
04.12.2017, 15:08
    #39563775
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
hVostt,
Ну дак понятно, что приходя в ВУЗ вам скажут забудьте школу))))).
Удачи аффтару.
...
Рейтинг: 0 / 0
05.12.2017, 11:58
    #39564263
Arpanx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
repository & aggregate entity
hVostt спасибо за ценные замечания, как раз от метров и хотел услышать соображения на тему.

Спрятал свой Join в один из методов репозитория, работает, вроде красиво. Но появились зависимости от типов которые определены снаружи.
И то что репозитой возвращает DTO.

Вынес это все в отдельный сервис, работает. Но нехватало гибкости который мне давайл DBContext. Поэтому изначально все сделал на нем.

Потом решил все таки переделать на работу сервиса от репозитория
Возвращаю из репозитория в сервис вот так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public virtual IEnumerable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
        {
            IQueryable<T> query = _context.Set<T>();
            foreach (var includeProperty in includeProperties)
            {
                query = query.Include(includeProperty);
            }
            return query.AsEnumerable();
        }




В сервисе пытаюсь сделать

Код: c#
1.
2.
3.
4.
5.
_vehicleRepository.AllIncluding(x => x.DepartmentVehicles, x => x.VehicleParameters).ToList();

var department = _vehicleRepository;
foreach (var d in department)
       {}



Код: c#
1.
foreach statement cannot operate on variables of type '?' because '?' does not contain a public definition for 'GetEnumerator'



Generic Repository вроде делали умные люди, чего-то не хватает. Разбираюсь.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / repository & aggregate entity / 25 сообщений из 305, страница 1 из 13
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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