Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
skyANAМСУ, ты сам начал с фразы: "Бред сивой кобылы". Вот он тебе той же монетой и ответил. Я объяснил, почему эти дженерик сервисы и репозитории идут лесом. hVosttМСУ, я по теме сказал очень много. если ты слепой, то тут уже ничем не поможешь. а твой репозиторий «в реалиях» мы так и не увидели. как я и предполагал, ты только языком ворочать можешь. Ты по теме промычал что-то невнятное про обобщенный слой. Я тебе сказал, что это годится только для детского сада. Что мне тебе еще нужно показывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 21:58 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
МСУ, пока все это голословно. и ничего ты не объяснил. про aggregate root сущность было уже сказано, но ты видимо не в курсе о чем это, поэтому пихаешь все что попало, и дженерики тебе не подходят. если что, то дженерики подходят к репо на все 100%, таким образом в самом обобщенном случае реализацией репы может выступать даже обычный List<T>, что крайне хорошо для тестирования, таким образом логика не размазывается и каждый класс совершенно точно знает с чем работает, и выполняет сугубо свою задача, на залезая не на чьё поле. все, что выходит за рамки репы — в бизнес-логику. не надо мешать одно с другим и пытаться что-то нагородить кривобокое. посему, пропихивать говнокодинг, МСУ, не надо. или приводи пример, подтверждающий свои слова, или иди лесом, пока все твои слова высер умственно отсталого, который ляпает сам не зная чего. примеры давай. ссылки, пруфы, шо там у тебя есть за пазухай. или не умничай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 23:47 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
Репозиторий. Ссылка была уже приведена, но я повторю: http://design-pattern.ru/patterns/repository.html Цитата: Паттерн Repository посредничает между слоем области определения и слоем распределения данных, работая, как обычная колекция объектов области определения. и оно понятно, сам термин Repository переводится, как «хранилище» Почему здесь уместны generics? Давайте посмотрим типичное переопределения DataContext: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В данном случае каждый DbSet<T> является репозиторием отдельной сущности. Если T имеет навигационные свойства, то через полученный объект/коллекцию, можно получить доступ к связанным объектам. Поэтому каждому отдельному репозиторию нет нужды предоставлять доп. набор методов для связанных сущностей. Правда и здесь не все так идеально, как хотелось бы. Remove() выполненный для коллекции навигационного свойства не является равнозначной инструкцией Remove() репозитория (объект не удаляется, а лишь уничтожается связь). Что логично, в принципе. Для учебных примеров вроде сойдёт. Но теперь к боевым «реалиям». Определяем интерфейс: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Этого базиса хватит с головой для выполнения любых операций. Update технически не нужен для работы с EF, но должен присутствовать и использоваться. Реализация для EF: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Плюсов в таком подходе достаточно: 0. Самое главное! Тестирование! Очень легко генерить коллекции и подсовывать их как источник данных. 1. Реализацию полностью можно подменить на любую другую, сменив не только базу данных, провайдер, но и ORM. 2. В отдельных случаях можно подменить реализацию репы одной сущности на другую, допустим какие-нибудь сверхогромные блобы могут храниться совсем в другой базе данных. Или отдельные данные должны храниться в более защищенном хранилище (особенно учитывая некоторые пункты Кодекса по обработке персональных данных)... 3. Можно изготовить фабрику, которая будет выдавать репу для любой запрошенной сущности, и это легко реализовать. Далее. Расширение. Код: c# 1. 2. 3. 4. Поясню, никто не запрещает расширять репу кастомными методами, для оптимизации тех же тяжелых запросов (для которых возможностей LINQ может не хватать), в том числе если надо избавиться в некоторых случаях от Lazy-поведения. Репозиторий должен делать только то, что должен: «достижение полного разделения и односторонней зависимости между уровнями области определения и распределения данных» . Все остальные задачи ложатся на другие слои бизнес-логики: менеджеры, сервисы, управление процессами, правилами и прочая хрень, что выходит за рамки хранилища . Пытаться пихнуть на репу каких-то еще задач, выйдет боком для сопровождения, развития и самое главное — для тестирования. Дженерики здесь очень даже уместны. Есть возражения? Примеры плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 05:40 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
Еще одно уточнение. Если какому-то сервису треба работать с несколькими сущностями, радя бога: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Если конструктор получается перегружен кучей зависимостей, значит в дизайне творится какая-то каша и требуется срочный рефакторинг. Для приложения не должен существовать какой-то мега-сервис, напичканный доступом ко всем данным. Ни в коем случае. Если такое имеет место быть, архитектура однозначно плохая и оправданий этому не может быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 06:08 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttЕсть возражения? Примеры плз.Да. Смотри первые две проблемы тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 09:37 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
skyANA, проблем не вижу. хотите, используйте спецификации (я использую). не хотите, делайте «фабрику запросов». специфика DAL не вылазит за пределы репы, если этого не сделать умышленно (всякие IsChanged инкапсулируются в прокси, и без специальных методов доступ к ним не получить). на счет того, делать или не делать специфичный репо для поголовно для каждого домена, согласен с принципом aggregation root, т.е. делать только для root, но с другой стороны, имя под рукой фабрику, генерирующую репу для домена, вообще проблем не имеем. делаем специфику там, где требуется. где не требуется, обходимся фабрикой или вылизываем архитектуру. ссылкой на репу доменный объект не обладает. не считая навигационные свойства. использовать их или не использовать зависит от требуемого уровня абстрагирования. можно не использовать. про UnitOfWork я уже говорил. делаем IUnitOfWork и получаем его только там, где требуется изменение данных. в плюсах — если не видим у потребителя наличия IUnitOfWork, значит на все 100% знаем — данные он не изменяет. это неимоверный гуд. репа и UnitOfWork не связаны вообще никак. заботиться об этом не нужно, если правильно употреблять IoC. никаких затрапезных студенческих поделок типа using(...) { } итого: недостаток шаблона Repository только в его неправильном употреблении, и попытка сделать из него монстра с огромной кучей примитивных методов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 09:54 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttпроблем не вижу. хотите, используйте спецификации (я использую). не хотите, делайте «фабрику запросов».У тебя полтора человека в команде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 09:57 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
skyANA, вот об этом и речь :) я использую, но не пишу. четкое разделение ответственности в коде, позволяет организовать работу команды, понимать и использовать наработки друг друга. если писать единоличный проект, там можно творить все щто угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 10:03 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttUpdate технически не нужен для работы с EF, но должен присутствовать и использоваться. А почему не нужен? Как и где он реализуется? ps При работе с DbContext напрягает вся эта тема с Property.IsModified. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 10:20 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttЕсли конструктор получается перегружен кучей зависимостей, значит в дизайне творится какая-то каша и требуется срочный рефакторинг. РБД это уже каша, которую таки придется расхлебывать. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 10:25 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
Парамон, Update не нужен, потому что изменения отслеживаются. Update должен применяться, чтобы не зависеть от этого поведения. если вы не хотите отслеживания (IsModified внутрях), можете получать объекты AsNoTracking(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 10:27 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttесли вы не хотите отслеживания (IsModified внутрях), можете получать объекты AsNoTracking(). А если я не хочу получать объекты, а просто приаттачить по айди? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 10:41 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
Парамон, интересен сам механизм, в результате которого вы хотите приатачить объект по айди. мне вот такого ни разу не потребовалось. если у меня есть айди, я получая объект, апдейчу его, затем сохраняю. зачем атачить? там щто пару тыщей полей? расходы на эту операцию в масштабах приложения вообще не существенны, это не то, на чем стоило бы экономить. хотя приатачить таки можно. контекст это позволяет. но тогда будет дыра в абстракции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:07 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVostt зачем атачить? там щто пару тыщей полей? расходы на эту операцию в масштабах приложения вообще не существенны, это не то, на чем стоило бы экономить. Да полно операций, которые выполняют чисто апдейт, таблица на 40 - 50 полей (полно nvarchar), есть нагрузка. Мне каждый раз делать селект перед этим? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:17 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVostt, нифига ты не понимаешь репозитарий в твом примере один - dbcontext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:22 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
Парамон, не зная реальной специфики и нагрузки, трудно сказать, почему бы и нет. функцию, которая опдейтит нужные данные (ч/з аттач или через процедуру) можно сделать, ничего не мешает. если еще есть возможность проектировать/изменять схему данных, если полей так много стоит может задуматься уже и о нормировании :) видал я базы с таблицами over 200 полей. ниче так. я такие системы называю «системами поддержания работообеспечения персонала» ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:28 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
ViPRoshVostt, нифига ты не понимаешь репозитарий в твом примере один - dbcontext если работать напрямую только с ним, то да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:29 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVostt, только с ним и работаешь как токо начинается транзакция так что все остальное нафиг не нужно и не каждый dbcontext есть полноценный репозитарий (полноценный должен дать возможность зафиксировать любую транзакцию если нет конкурренции) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:32 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttПарамон, не зная реальной специфики и нагрузки, трудно сказать, почему бы и нет. функцию, которая опдейтит нужные данные (ч/з аттач или через процедуру) можно сделать, ничего не мешает. если еще есть возможность проектировать/изменять схему данных, если полей так много стоит может задуматься уже и о нормировании :) видал я базы с таблицами over 200 полей. ниче так. я такие системы называю «системами поддержания работообеспечения персонала» Да я вижу сколько систем ты видел если, предлогаешь два обращения вместо одного. Выходит прийдется нарушать концепцию и размазывать логику, а? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:33 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
ViPRos, ради бога. называйте что хотите, как хотите :) получаете UoW, и работаете с ним. забываете о транзакциях и конкуренции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:37 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
Парамон, ничего идеального не бывает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:39 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
hVosttViPRos, ради бога. называйте что хотите, как хотите :) получаете UoW, и работаете с ним. забываете о транзакциях и конкуренции. когда получиш уов твой, то заранее надо знать а зафиксируется ли оно :) а ты нифига не знаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:41 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
все эти пустые слова придумали дебилы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:43 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
ViPRos, вернее слова то верные- а вот интерпетация - говно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:44 |
|
||
|
Грамотная архитектура приложения на ASP.NET MVC
|
|||
|---|---|---|---|
|
#18+
ViPRosкогда получиш уов твой, то заранее надо знать а зафиксируется ли оно :) а ты нифига не знаешь если не получу исключения, начит все зафиксировалось. может стоит еще манетку подбрасывать и гадать на луже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2013, 11:46 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38326482&tid=1358286]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 395ms |

| 0 / 0 |
