|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, да, мы же ведет дискуссию про объекты EF и новые бизнес-объекты. Я вот спросил на примере конкретной БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 12:58 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANA, да, мы же ведет дискуссию про объекты EFПозволю себе некоторую иронию: Работа с объектами (платформа Entity Framework) . Интересно, зачем в EF поддерживается четыре типа сущностей: EntityObject, POCO, Прокси POCO и Сущности с самостоятельным отслеживанием? Разве одного типа не достаточно для большинства проектов? Сам я с EF не работал, поэтому хотелось бы услышать Ваши комментарии. netivanЯ вот спросил на примере конкретной БД.К сожалению я не работал с БД Northwind и не знаком с её структурой. Насколько я знаю, это учебная база от MS. Фишка в том, что в институте на лабах у нас была Delphi Paradox Database, карьеру я начал с Oracle, а когда столкнулся с Sql Server, то учебные базы ковырять уже не имело смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 13:15 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Друзья, вообще солид - это УГ. Всё, все по домам. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 13:46 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, что-то в тупик меня поставили. Я кстати не особый знаток ЕФ,достаточно давно с ним работал. Но если честно не вижу для нашей беседы разницы в тех походах. А про БД Northwind вы загнули она достаточно типичная. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 14:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, что я загнул про БД Northwind? Что не работал с ней? Действительно не работал. Убедите меня в обратном. Погуглил:technet.microsoft.comThe Northwind and pubs sample databases are not installed by default in Microsoft SQL Server.technet.microsoft.comThe AdventureWorks2008R2 sample databases that are used in the code examples in SQL Server Books Online can be downloaded from the Microsoft SQL Server Samples and Community Projects home page.Это я к тому, что даже краем глаза не мог видеть БД Northwind, т.к. её отдельно надо скачивать и прикреплять к инстансу сервера. А что значит "она достаточно типичная"? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 14:43 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, авторА что значит "она достаточно типичная"? типичное решение типичной задачи. Клиенты, продажи и т.д. Да и вообще я всего лишь хотел донести мысль, что следовать принципам потому что так написано где-то имхо глупо и неправильно. Если модели домена и бизнеса совпадают это сразу неправильно и плохо? Бред. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 15:25 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЕсли модели домена и бизнеса совпадают это сразу неправильно и плохо? Бред. Что такое "модель бизнеса"? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 15:47 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANA, авторА что значит "она достаточно типичная"? типичное решение типичной задачи. Клиенты, продажи и т.д. Да и вообще я всего лишь хотел донести мысль, что следовать принципам потому что так написано где-то имхо глупо и неправильно. Если модели домена и бизнеса совпадают это сразу неправильно и плохо? Бред.Хм. Клиенты, продажи и т.д. Какой хороший пример :) Значит есть заказы. В заказе есть шапка/заголовок/основная часть и товары/услуги/детализация. В реляционной БД это минимум две сущности/таблицы (в реальности конечно больше, т.к. есть всякие справочные данные типа валюты, единиц измерения и т.п.), в коде доменной модели одна - заказ (агрегирующая). По Вашему тут нужен маппинг или нет? :) P.S.: а я разве предлагал слепо следовать принципам? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 15:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAВ реляционной БД это минимум две сущности/таблицы (в реальности конечно больше, т.к. есть всякие справочные данные типа валюты, единиц измерения и т.п.), в коде доменной модели одна - заказ (агрегирующая).Тут имеется ввиду, что данные в БД раскиданы по нескольким таблицам, а инстансе заказа они собраны. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 16:01 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAskyANAВ реляционной БД это минимум две сущности/таблицы (в реальности конечно больше, т.к. есть всякие справочные данные типа валюты, единиц измерения и т.п.), в коде доменной модели одна - заказ (агрегирующая).Тут имеется ввиду, что данные в БД раскиданы по нескольким таблицам, а инстансе заказа они собраны. а там в EF будет все что нужно в связанной коллекции :). Но если даже предположить что надо получить имя какого-то справочника для заказа, то какой-то код приложения дернет 2 репозитория (например) и заполнит некий объект. Но помойму это не маппинг, а уже совсем логика /контроллер/ хуеллер. Например пусть это будет в методе WCF сервиса СформироватьЗаказ НОМЕР ХХХ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:27 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAпропущено... Тут имеется ввиду, что данные в БД раскиданы по нескольким таблицам, а инстансе заказа они собраны. а там в EF будет все что нужно в связанной коллекции :). Но если даже предположить что надо получить имя какого-то справочника для заказа, то какой-то код приложения дернет 2 репозитория (например) и заполнит некий объект. Но помойму это не маппинг, а уже совсем логика /контроллер/ хуеллер. Например пусть это будет в методе WCF сервиса СформироватьЗаказ НОМЕР ХХХВы смешали всё в кучу и пишете глупости. Давайте разбираться: 1. 2 репозитория тут не нужно. Заказ является корнем агрегации (почитайте на досуге про этот термин) и достаточно одного репозитория, что возвращает заказы; 2. Репозиторий не отвечает за маппинг, репозиторий дёргает EF; 3. EF - это ORM, что расшифровывается как object-relational mapping. То есть если Вы используете EF напрямую, без прослойки в виде репозитория, или внутри реализации репозитория, то маппинг выполняется. Если Вы не используете EF, или какой другой ORM, то придётся писать маппинг самостоятельно. И от того, что Вы его ручками напишите, он не станет логикой/контроллером/хелпером. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:48 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, вот видите, вы говорите "глупости", а я вам говорю что это не глупости. Давайте разбираться далее. Под репозиторием я подразумеваю http://blogs.msdn.com/b/wriju/archive/2013/08/23/using-repository-pattern-in-entity-framework.aspx вот- что-то такое. И вполне может быть что при формировании "заказа" может потребоваться обращаться к нескольким таким репозиториям. В конце концов представим что у нас не EF c готовыми маппингами связанных сущностей а самописный слой. В чем глупость? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, не спешите. Я Вам задал прямой вопрос: "По Вашему тут нужен маппинг или нет?". Давайте сначала на него ответим, а потом уже будем разбираться с количеством репозиториев :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 17:57 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Хотя нет. Давайте сразу на Ваш вопрос ответим:netivanВозьмем известный пример бд Northwind. Что там маппить будете? Маппить (отображать) будем данные из нескольких таблиц БД на одну доменную сущность - заказ. Согласны? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:02 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAХотя нет. Давайте сразу на Ваш вопрос ответим:netivanВозьмем известный пример бд Northwind. Что там маппить будете? Маппить (отображать) будем данные из нескольких таблиц БД на одну доменную сущность - заказ. Согласны? я вам косвенно ответил уже. авторЗначит есть заказы. В заказе есть шапка/заголовок/основная часть и товары/услуги/детализация. Имеем заказ как бизнес-сущность, совсем не связанную с БД, так? Чтобы "собрать" заказ я буду обращаться к разным сущностям Бд через репозиторий EF (например). И вся логика работы с заказом будет в отдельном классе/сервисе/контроллере. Только я бы это маппингом не стал называть ибо вывести Заголовок как вы сказали в виде больших букв,например, задача совсем не репозитория с маппингами :) Если вы намекаете, что тем самым я буду дублировать код например в сервисе и веб-приложении, то да, такое может быть и тогда этот бизнес-объект с логикой будет в отдельном месте, а уже результат его работы будут использоваться все по своему. ЗЫ наверное пример с большими буквами неудачный, тут сразу закидаете что это "представление". Пусть будет лучше какая-то сложная формула для суммы заказа. ЗЫ фух, слишком для вечера пятницы! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:33 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, Вы скачете с пятого на десятое и путаетесь. Ещё раз сначала: 1. в БД две таблицы: Orders (шапка/заголовок/основная часть заказа) и OrderDetails (товары/услуги/детализация по заказу); 2. с точки зрения доменной модели одна сущность: Order (заказ). Вам нужно представить данные, что лежат в БД в виде сущности доменной модели (экземпляра класса Order), согласны? Это называется object-relational mapping. Отображение реляционнных данных на объект области определения. Бизнес логика работы с заказом нам тут пока на фиг не нужна, код этой логики отрабатывал, когда заказ оформляли (генерировался номер заказа, учитывались всякие скидки/наценки). Ни про какие выводы Заголовка куда-то там в представление я не писал, и уж тем более не называл это маппингом. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:52 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЗЫ наверное пример с большими буквами неудачный, тут сразу закидаете что это "представление". Пусть будет лучше какая-то сложная формула для суммы заказа.Сложные формулы не нужны, так как уже применены, заказ оформлен, данные уже в БД. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:55 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanЗЫ фух, слишком для вечера пятницы!Оно и видно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:55 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAnetivan, Вы скачете с пятого на десятое и путаетесь. Ещё раз сначала: 1. в БД две таблицы: Orders (шапка/заголовок/основная часть заказа) и OrderDetails (товары/услуги/детализация по заказу); 2. с точки зрения доменной модели одна сущность: Order (заказ). Вам нужно представить данные, что лежат в БД в виде сущности доменной модели (экземпляра класса Order), согласны? Это называется object-relational mapping. Отображение реляционнных данных на объект области определения. Бизнес логика работы с заказом нам тут пока на фиг не нужна, код этой логики отрабатывал, когда заказ оформляли (генерировался номер заказа, учитывались всякие скидки/наценки). Ни про какие выводы Заголовка куда-то там в представление я не писал, и уж тем более не называл это маппингом. да, я напутал. У меня это будет так OrderRepository<Order>, где Order это класс EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 18:57 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivanskyANAnetivan, Вы скачете с пятого на десятое и путаетесь. Ещё раз сначала: 1. в БД две таблицы: Orders (шапка/заголовок/основная часть заказа) и OrderDetails (товары/услуги/детализация по заказу); 2. с точки зрения доменной модели одна сущность: Order (заказ). Вам нужно представить данные, что лежат в БД в виде сущности доменной модели (экземпляра класса Order), согласны? Это называется object-relational mapping. Отображение реляционнных данных на объект области определения. Бизнес логика работы с заказом нам тут пока на фиг не нужна, код этой логики отрабатывал, когда заказ оформляли (генерировался номер заказа, учитывались всякие скидки/наценки). Ни про какие выводы Заголовка куда-то там в представление я не писал, и уж тем более не называл это маппингом. да, я напутал. У меня это будет так OrderRepository<Order>, где Order это класс EF.Замечательно! Мы развеяли Ваши заблуждения о бестолковом маппинге:netivanЗачем для этого бестоклу мапить объекты? И получили ровно один репозиторий. Ура! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2014, 19:03 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, не Ура, их несколько. Вот разгребу напишу код).Хотя возможно мы говорим об одном и том же. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2014, 12:39 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
netivan, для одного корня агрегации (aggregation root) достаточно одного репозитория. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2014, 13:53 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Я тоже. :-)Потому как нет никакого наезда. :)Мне наверное показалось . Собственно, с чего и был начат этот топик. skyANAПосмотрев остальной код проекта, прихожу к выводу, что DRY (don’t repeat yourself) у Вас и не пахнет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 11:27 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
skyANA, мы немного по-разному понимаю данный термин. Хорошо, в конкретном примере "Заказ" будет единственным нужным репозиторием. Вообщем вроде бы мы пришли в завершению темы. Может кто еще выскажется) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 11:38 |
|
О применении SOLID
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Потому как нет никакого наезда. :)Мне наверное показалось . Собственно, с чего и был начат этот топик. skyANAПосмотрев остальной код проекта, прихожу к выводу, что DRY (don’t repeat yourself) у Вас и не пахнет.Показалось. И мы начали обсуждать этот момент в начале топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 21:08 |
|
|
start [/forum/topic.php?fid=20&msg=38522160&tid=1403421]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
103ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 226ms |
0 / 0 |