|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
В EF DbContext и DbSet<T>, вообще говоря, реализуют из коробки соответственно UnitOfWork и Repository. Во всяком случае, сложилось такое мнение. Погуглил на этут тему, а там народ, следуя четко по букварям оборачивает их руками в свои классы, которые реализуют свои интерфейсы интерфейсы. Т. е. вводят что-то вроде: IRepository<T>, IUnitOfWork Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: sql 1. 2. 3. 4. 5.
Реализуют что-то вроде такого: EfRepository<T>, EfUnitOfWork Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: sql 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.
Используют как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вопрос в следующем и относится исключительно к случаю, когда используется EF Designer . Если поколупаться, для генерации Context'a используюься tt, которые можно менять как угодно, чтобы те выдавали уже готовые, какие надо классы обертки для контекста, дбсетов, чтобы оно само добавляло в наследование какие надо интерфейсы IUnitOfWork, IRepository и т. п.. Вопрос, почему так не делают через tt или я плохо искал или кто-то делает? Поделитесь впечатлениями/подходами. Вопрос второй, предположим мы абстрагировались с помощью интерфейсов по самое не могу от "инфраструктурной черни по книжкам умных дядек", и в нашей DomainModel'и ссылаемся на инфраструктурный слой исключительно по интерфейсам, возникает вопрос, как быть с Disconnected сценарием, когда граф обьектов приходит извне и его надо сохранить. В общем случае без ObjectStateManager здесь не выкрутиться. В голову приходит использовать какие-нибудь self tracking entities с контекстом, который их понимает (т. е. шаблон генерящий entities, генерирует их как self tracked и шаблон генерирующий контекст, делает его понимающим self tracked сущности. т. е. предполагается менять tt которые создаются вместе с edmx для достижения такого результата). Это все пока высосанное из пальца "...а что если вдруг?...". У кого какие соображения и т. п.. Интересно знать для понимания границ применимости и т. п.. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 23:08 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord British, если у вас EF или NH - выкиньте к чёрту репозиторий. Общение с базой данных слишком сложный процесс, чтобы от него можно было хоть как-то абстрагироваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 23:16 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtor, Я примерно это и хотел услышать, спасибо! Хотя предчувствую говносрач в этой темке :D. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 23:23 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
EF по дефолту генерит репозиторий. Я устал объяснять, что написание репозитория над репозиторием - бренд сивой кобылы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 01:05 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУEF по дефолту генерит репозиторий. Я устал объяснять, что написание репозитория над репозиторием - бренд сивой кобылы. Чего только не сделаешь для беглого доступа пользователей... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 01:59 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Программисты даже поиском пользоваться не умеют. Выбирай , руками никто не оборачивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 08:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, судя по посту, вы придерживаетесь подхода - обернуть в свое. Понятно, все таки tt используют. Хотелось бы услышать мнение, из коробки оно и так UnitOfWork и Repository. Какие преимущества дает введение своего интерфейса IUnitOfWork и IRepository, кроме того, что можно проще написать FakeRepository для тестирования? И сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Как живется с этим розовым миром в случае Disconnected сценария и. Concurrency. Не получается ли в итоге, что интерфейс IUnitOfWork и IRepisitory полностью или почти полностью дублирует публичный интерфейс классов DbContext, DbSet<>… Очень интересно узнать мнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 09:44 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, вот, например, http://tdryan.blogspot.com/2011/03/another-entity-framework-4-repository_5988.html?m=1 человек вводит свои интерфейсы (типа абстрагировался по букварю) и следом вводит в них свойства вроде LazyLoading, ProxyEnabled и т. п.. И это независимость от инфраструктурного кода? А если усложнить сценарий использования? Масло масляное масло, нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 09:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
пардон, сцылко не то, вот правильное http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 09:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishSeVa, судя по посту, вы придерживаетесь подхода - обернуть в свое. Понятно, все таки tt используют. Хотелось бы услышать мнение, из коробки оно и так UnitOfWork и Repository. Какие преимущества дает введение своего интерфейса IUnitOfWork и IRepository, кроме того, что можно проще написать FakeRepository для тестирования? И сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Как живется с этим розовым миром в случае Disconnected сценария и. Concurrency. Не получается ли в итоге, что интерфейс IUnitOfWork и IRepisitory полностью или почти полностью дублирует публичный интерфейс классов DbContext, DbSet<>… Очень интересно узнать мнение. Естественно, что репозитории для говнокода не нужны и об этом на неустанно напоминает MCУ. А в нормальной архитектуре должны соблюдаться принципы SOLID. Абстрактный интерфейс им отвечает, а все остальное нет. Имея его на руках можно не зависеть от доступа к БД и двигаться дальше. DAL - это копейки и в нормальном фреймворке его можно сменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 10:28 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord Britishпардон, сцылко не то, вот правильное http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx Это статья ни о чем, вернее, для MCушек, которые не осилили DI и привыкли брать толстой задницей ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 10:29 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, Есть на примете по-вашему мнению правильные статьи применительно к EF? Поделитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:08 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord British, вот тут копья ломали, Сева и им пододобные так и не осилили спич. Тема развивается не сначала, а отсюда: 13687982 Почитай, мож что предложишь своё. Тут реальный пример: http://codearticles.ru/Home/ArticleView/2155 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:20 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishИ сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Меня это тоже смущает, после всех чисток остается фактически одна структура - Anemic Domain Model и свалка DTO рядом. А смены orm на практике, так и не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:26 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaLord Britishпардон, сцылко не то, вот правильное http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx Это статья ни о чем, вернее, для MCушек, которые не осилили DI и привыкли брать толстой задницей Я щас почитал ту статью, до этого лишь смотрел по диагонали до определения интерфейсов репозитория и юнитофворк. Давайте абстрагируемся от реализации этих интерфейсов автором статьи, и тогда нам не важно использовал он ди или инстанциировал/собирал обьекты руками. Предположим у вас есть интерфейс репозитория как у автора статьи, разве можно с ним решить задачу в disconnected сценарии? Добавим сюда Concurrency, для навару. Ведь чтобы сохранить граф в этом случае, прийдется спуститься до кишок objectstatemanager, или пилить self tracked entity и реализацию контекста под них. Хотя последнее можно обернуть в юнитофворк/репозитори. Может вы сможете предложить достаточно полные интерфейсы, позволяющие это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:31 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, спасибо гляну. Но врядли что-то предложу, так как порват боян и в узел завязанныи, да и я не фаулер. А может оно и клучшему? :) Парамон, угу. Пишу с трубы так что стоит за отпечатки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:41 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонLord BritishИ сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Меня это тоже смущает, после всех чисток остается фактически одна структура - Anemic Domain Model и свалка DTO рядом. А смены orm на практике, так и не происходит. А не только сменой ORM под знамя маршируем, есть еще 70% задач, в которых в бизнес слое нужно оперировать комплексными сущностями, напр: ProductInfo (ProductId, ProductName, CategoryName) которые получаются из чистых дата классов (Product, Category). Без DTO никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Посему я и предлагаю чистый MVP подход - IDataService. В реализации своих сервисов может быть что угодно, никаких дополнительных EF репозиториев - сам контекст априори репозиторий. Вообщем, берем попкорн и читаем срач. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:56 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ ProductInfo (ProductId, ProductName, CategoryName) которые получаются из чистых дата классов (Product, Category). Без DTO никак. Вот только как через него сложные пропертя и методы протягивать? Если в сервис слой, то мдель совсем стирильная остается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУ ProductInfo (ProductId, ProductName, CategoryName) которые получаются из чистых дата классов (Product, Category). Без DTO никак. Вот только как через него сложные пропертя и методы протягивать? Если в сервис слой, то мдель совсем стирильная остается. В DTO "сложным пропертям" и методам делать нечего. есть дата класс есть DTO (обвязка одного или нескольких дата классов) есть модель (бизнес-логика, которая оперирует DTO классами) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:33 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishSeVaпропущено... Это статья ни о чем, вернее, для MCушек, которые не осилили DI и привыкли брать толстой задницей Я щас почитал ту статью, до этого лишь смотрел по диагонали до определения интерфейсов репозитория и юнитофворк. Давайте абстрагируемся от реализации этих интерфейсов автором статьи, и тогда нам не важно использовал он ди или инстанциировал/собирал обьекты руками. Предположим у вас есть интерфейс репозитория как у автора статьи, разве можно с ним решить задачу в disconnected сценарии? Добавим сюда Concurrency, для навару. Ведь чтобы сохранить граф в этом случае, прийдется спуститься до кишок objectstatemanager, или пилить self tracked entity и реализацию контекста под них. Хотя последнее можно обернуть в юнитофворк/репозитори. Может вы сможете предложить достаточно полные интерфейсы, позволяющие это сделать? Вопросы правильные, тк один DAl - это мизер в 5%. Для разработки клиентских приложений без геморроя нужно еще по крайней мере: - валидация - реализация интерфейсов ошибок и изменений - поддержка полного графа объектов - undo\redo - ленивая загрузка - переносимость - возможность переключения с 2х звенки на 3х - etc Реализация все этого - весьма нетривиальная задача, но если это не реализовано, то клиентская часть превращается в говнокод(убожество в виде asp.net - отдельная история непригодная для бизнес-приложений, которую я даже не рассматриваю). Все это есть в csla(dal может быть любой + можно полностью абстрагироваться с помощью ObjectFactory). Если бы я сейчас делал все с нуля, то я бы внимательно рассмотрел на web api c OData, в которых есть приятные моменты, которых раньше не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:35 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУПосему я и предлагаю чистый MVP подход - IDataService. В реализации своих сервисов может быть что угодно, никаких дополнительных EF репозиториев - сам контекст априори репозиторий. Вообщем, берем попкорн и читаем срач. Херня на постном масле, которая пригодна только для говносборников и отстойных рецептов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:40 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУПосему я и предлагаю чистый MVP подход - IDataService. В реализации своих сервисов может быть что угодно, никаких дополнительных EF репозиториев - сам контекст априори репозиторий. Вообщем, берем попкорн и читаем срач. Херня на постном масле, которая пригодна только для говносборников и отстойных рецептов. Иди это Фаулеру расскажи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:43 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, а что такое ДТО? есть концепт - Накладная, состоит из Шапки и Спецификация кто тут кто? (класс, ДТО) что читает ОРМ - Накладную? или по отдельности Ш и С? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosМСУ, а что такое ДТО? http://msdn.microsoft.com/en-us/library/ff649585.aspx ViPRosесть концепт - Накладная, состоит из Шапки и Спецификация кто тут кто? (класс, ДТО) что читает ОРМ - Накладную? или по отдельности Ш и С? Что не ясно отсюда? 13762103 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:56 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ есть дата класс есть DTO (обвязка одного или нескольких дата классов) есть модель (бизнес-логика, которая оперирует DTO классами) Потом в модели завернули новый DTO и отправили дальше. Длинный конвеер получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:59 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, да как раз не ясно, как это класс без совйств и методов зачем он нужен счас прочту ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:00 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, ах вот оно что, это какой то фаулер Датасет назвал ДТО ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:03 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Seva, - реализация интерфейсов ошибок и изменений - INotifyPropertyChanged, INotifyCollectionChanged, IErrorDataInfo? - поддержка полного графа объектов - что имеется ввиду? - undo\redo - IEditableObject? - ленивая загрузка - lazy/eager loading? - переносимость - что имеется ввиду? если это переносимость между СУБД, то могу подкинуть предметную область, где все запросы будут не на стандартном SQL и схема данных будет различной в разных СУБД. Обработка геоданных/картография/анализ дорожных сетей. Можно пилить свою реализацию на табличках и колонках, вряд ли будет эффективно, а можно пользоваться средствами специфичными для СУБД и с частью логики на PL/SQL (увы большей частью), а частью снаружи. Есть компании, которые решают это выпуская свои специальные продукты, через которые работают все вышележащее (например, ESRI ArcSDE такой продукт шлюз, под каждую СУБД своя схема, своя реализация логики, публичный API общий - слушает порт, протокол одинаковый). Не каждая контора потянет денежкой содержать столько зверей под каждую СУБД (MS SQL, Oracle, DBII, PostgreeSQL). Это я к тому, что переносимости может и не получиться по выше описанным причинам. - возможность переключения с 2х звенки на 3х - можно подробнее? - etc --- Кстати говоря, ползуясь случаем, хочу спросить кто колупал LightSwitch, как ощущения? Там вроде есть все перечисленное выше для некоторого круга задач, типа документооборотов и т. п... --- Давайте все же вернемся к EF, UOW, REPO и потроллим друг-друга на тему надо/не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:10 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУ есть дата класс есть DTO (обвязка одного или нескольких дата классов) есть модель (бизнес-логика, которая оперирует DTO классами) Потом в модели завернули новый DTO и отправили дальше. Длинный конвеер получается. да конвеер то фиг с ним, это мы умеем, линии конвееры танки... а что делать с таким классом, ну получил кто то такой класс, а там ни свойств ни методов ужсть какой то ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:10 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонПотом в модели завернули новый DTO и отправили дальше. Длинный конвеер получается. А дальше - точно так же, как и обычно. То есть DTO - это плюс 1 абстракция, с помощью которой мы: а) не прибиваем прикладной слой логики к конкретному ORM б) абстрагируемся от дата-классов (маппинг объектов хранилища), пример с ProductInfo (ProductId, ProductName, CategoryName) Второе намного важнее, чем фееричная смена ORM. Просто если мы реализуем пункт б), мы автоматом получаем в бонус пункт а) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:28 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishКстати говоря, ползуясь случаем, хочу спросить кто колупал LightSwitch, как ощущения? Там вроде есть все перечисленное выше для некоторого круга задач, типа документооборотов и т. п... Я колупал, жалкое сильверлайтовское отребье. Тут недавно было. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:31 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishДавайте все же вернемся к EF, UOW, REPO и потроллим друг-друга на тему надо/не надо. Это не тема, а мелкие частности, которые в любой момент могут быть заменены. Если это есть, то это решение. А сам по себе EF пригоден только в качестве тупого DAL, любые попытки слепить из него что-то более внятное(ты упоминал: lazy, proxy) ничего не дадут кроме еще большего усложнения и так мало пригодной половы ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:31 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, правильно я понимаю, что ДТО в моем примере это - Накладаная целиком? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:40 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
или это что бог на душу положит? типа какой нить джойн? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:41 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
даю 5 мин на ответ, потом расстрел на месте ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:43 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosМСУ, правильно я понимаю, что ДТО в моем примере это - Накладаная целиком? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 15:49 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosили это что бог на душу положит? типа какой нить джойн? Это то, что требуется твоей бизнес-логике. EF классы (ORM) Код: 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.
DTO (то, что нужно модели) Код: c# 1. 2. 3. 4. 5.
IDataService: Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:02 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУА дальше - точно так же, как и обычно. То есть DTO - это плюс 1 абстракция, с помощью которой мы: а) не прибиваем прикладной слой логики к конкретному ORM б) абстрагируемся от дата-классов (маппинг объектов хранилища), пример с ProductInfo (ProductId, ProductName, CategoryName) Второе намного важнее, чем фееричная смена ORM. Просто если мы реализуем пункт б), мы автоматом получаем в бонус пункт а) Это из плюсов, а минусов тоже не мало. Pros and Cons of Data Transfer Objects Как на пример туева хуча дата шейпов, чуть ли не на каждый запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:02 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУА дальше - точно так же, как и обычно. То есть DTO - это плюс 1 абстракция, с помощью которой мы: а) не прибиваем прикладной слой логики к конкретному ORM б) абстрагируемся от дата-классов (маппинг объектов хранилища), пример с ProductInfo (ProductId, ProductName, CategoryName) Второе намного важнее, чем фееричная смена ORM. Просто если мы реализуем пункт б), мы автоматом получаем в бонус пункт а) Это из плюсов, а минусов тоже не мало. Pros and Cons of Data Transfer Objects Как на пример туева хуча дата шейпов, чуть ли не на каждый запрос. Что за дата шейпы? Резюме в статье: ...As an architect, however, you should always be on the alert to recognize signs indicating that the distance between the entity model and what the presentation expects is significant or impossible to cover. In this case, you should take the safer (and cleaner) route of DTOs. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:11 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУА дальше - точно так же, как и обычно. То есть DTO - это плюс 1 абстракция, с помощью которой мы: а) не прибиваем прикладной слой логики к конкретному ORM б) абстрагируемся от дата-классов (маппинг объектов хранилища), пример с ProductInfo (ProductId, ProductName, CategoryName) Второе намного важнее, чем фееричная смена ORM. Просто если мы реализуем пункт б), мы автоматом получаем в бонус пункт а) Это из плюсов, а минусов тоже не мало. Pros and Cons of Data Transfer Objects Как на пример туева хуча дата шейпов, чуть ли не на каждый запрос. Поэтому я и писал про OData, который позволяет обойти эти проблемы ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:18 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУЧто за дата шейпы? data shape DTO другими словами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:18 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ Резюме в статье: ...As an architect, however, you should always be on the alert to recognize signs indicating that the distance between the entity model and what the presentation expects is significant or impossible to cover. In this case, you should take the safer (and cleaner) route of На самом деле я и не вижу альтернатив, а хотелось бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:24 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaПоэтому я и писал про OData, который позволяет обойти эти проблемы Покурю на досуге, пока не ясно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:26 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонSeVaПоэтому я и писал про OData, который позволяет обойти эти проблемы Покурю на досуге, пока не ясно ) OData содержит метаинформацию, а это в купе с динамическими объектами позволяет сделать одну универсальную реализацию и не плодить сущности на каждый чих. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:30 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, это плохо такихДТО могут быть тыщами что то тут концептуально не проработано ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:38 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонSeVaПоэтому я и писал про OData, который позволяет обойти эти проблемы Покурю на досуге, пока не ясно ) Не кури, опять бредни Севы. OData в обсуждаемой теме никак не относится :) SeVaOData содержит метаинформацию, а это в купе с динамическими объектами позволяет сделать одну универсальную реализацию и не плодить сущности на каждый чих. Сдурел, что-ли? Ты бы еще рефлексию предложил в прикладном коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:40 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosМСУ, это плохо такихДТО могут быть тыщами что то тут концептуально не проработано Значит, тыщами. Классифицируй по предназначению. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:41 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, это просто запросы к БД? а зачем тогда объектная модель и маппинг? определение ДТО как я понимаю на сервереной части? или это просто метод какого то объекта не врубаюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:45 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
IDataService определен на сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:46 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
а на клиенте просто запрашиваешь сервис безотностительно к объектной модели? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:47 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosне врубаюсь Пиши на датасетах и не ипи мне моск :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 16:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, не разговор не о датасетах и еще че то ОРМ означет для меня что 1. Есть Объектная модель ОМ (т.е. вся работа по проблемной области сконцентрирована тут) 2. Есть Хранилище Х( в данном случае РСУБД) 3. Есть Прозрачный маппинг элементов ОМ в элементы Х никаких других конструкцтий тут не должно быть а с твоих слов выходит что в ЕФ ОМ сам по себе а работа идет с вспомогательными конструкциями какими то концепция нарушена ладно бы метод объекта автоматом маппировалась в ИДатаСервис (прозрачно), нет как я понял эти сервисы надо вручную создавать, а методы их вызывающие воще не относятся к ОМ прально? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:11 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУПарамонпропущено... Покурю на досуге, пока не ясно ) Не кури, опять бредни Севы. OData в обсуждаемой теме никак не относится :) SeVaOData содержит метаинформацию, а это в купе с динамическими объектами позволяет сделать одну универсальную реализацию и не плодить сущности на каждый чих. Сдурел, что-ли? Ты бы еще рефлексию предложил в прикладном коде. Муся, ты чмошник, который должен только молча копать и отрабатывать свою пайку, а не рассуждать о том, что правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:29 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosМСУ, не разговор не о датасетах и еще че то ОРМ означет для меня что 1. Есть Объектная модель ОМ (т.е. вся работа по проблемной области сконцентрирована тут) 2. Есть Хранилище Х( в данном случае РСУБД) 3. Есть Прозрачный маппинг элементов ОМ в элементы Х никаких других конструкцтий тут не должно быть а с твоих слов выходит что в ЕФ ОМ сам по себе а работа идет с вспомогательными конструкциями какими то концепция нарушена ладно бы метод объекта автоматом маппировалась в ИДатаСервис (прозрачно), нет как я понял эти сервисы надо вручную создавать, а методы их вызывающие воще не относятся к ОМ прально? ViPRos, не ломай голову и не пытайся в этих детских гули-гули найти какой-то смысл. Детка делает первые шаги в ООП, но с полными подгузниками особо не разбежишься ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:31 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Не кури, опять бредни Севы. OData в обсуждаемой теме никак не относится :) пропущено... Сдурел, что-ли? Ты бы еще рефлексию предложил в прикладном коде. Муся, ты чмошник, который должен только молча копать и отрабатывать свою пайку, а не рассуждать о том, что правильно. Сева, ты опущенец, которого все кому не лень опускают на форуме. Так было, так есть, так будет. Свыкнись со своей кармой, неуч. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:51 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Не кури, опять бредни Севы. OData в обсуждаемой теме никак не относится :) пропущено... Сдурел, что-ли? Ты бы еще рефлексию предложил в прикладном коде. Муся, ты чмошник, который должен только молча копать и отрабатывать свою пайку, а не рассуждать о том, что правильно. Попробуй с помощью с своего говнодата сервиса и прочего бреда изобразить то, что достаточно легко делается с OData. Один контрол и несколько незамысловатых классов и больше нет проблемы с кучей DTO. OData Viewer Tool Только тужься у себя в туалете, а не как обычно, на форуме ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaпропущено... Муся, ты чмошник, который должен только молча копать и отрабатывать свою пайку, а не рассуждать о том, что правильно. Сева, ты опущенец, которого все кому не лень опускают на форуме. Так было, так есть, так будет. Свыкнись со своей кармой, неуч. Научись сначала угу-угу внятно бормотать, а когда подрастешь, может, и будут твое вяканье слушать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Сева, ты опущенец, которого все кому не лень опускают на форуме. Так было, так есть, так будет. Свыкнись со своей кармой, неуч. Научись сначала угу-угу внятно бормотать, а когда подрастешь, может, и будут твое вяканье слушать. Кухарка предлагает использовать динамику в прикладном коде? Давно ли кухарка наведывалась к доктору? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 17:59 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, ну сама модель ОДата такая ж фигня как и ЕФ и т.д. кроме Сущноси и Связи нет ничего при это Сущность понимается как таблица в БД нет понятия Схемы (именованный набор Связанных сущностей) вот говрим Накладная и подазумрваем как минимум 2 Сущности - Шапка и Строки и связь между ними(в Випросе это макротип) но в отдельности эти сущности нафиг никому не нужны кроме Мсушнего Идатасервис Связь между Ш и С сильная но тут же есть и слабыее связи - материал, ЕДИМ и т.д. при задании схемы (макротипа) надо в мета указать сильные и слабые связи, направление зависимости и т.д. а так из БД гоняете в БД фигня все это ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 18:50 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishДавайте все же вернемся к EF, UOW, REPO и потроллим друг-друга на тему надо/не надо. К сожалению, в тему заглянули только штатные тролли, поэтому развести дискуссию по существу будет напряжённо. :) Могу лишь изложить поподробнее своё мнение. Сам прошёл путь Stored Procedure -> NHibernate -> Repository over Nhibernate -> NHibernate -> NoSQL (в процессе). В общем, в процессе работы по принципу Repository over Nhibernate пришёл к пониманию, что мне просто не хватает возможностей, которые есть в NH, и я потихоньку привожу Repository к ISesson. В итоге просто выкинул ненужным мне слой. И чуть позже наткнулся на хорошие блоги по этой теме: раз , два , и (особенно для любителей SOLID'а) три . Сам я тоже любитель SOLID. Но кроме него, надо держать в голове и свой разум. Ибо видел совершенно "солидный", но абсолютно неподдерживаемый код. И вдогонку. Вся эта суета вокруг слоёв вообще, и репозитория в частности задумывалась ради одной цели - сделать код более поддерживаемым за счёт повышения его понятности. И еще повторного использования кода. На самом деле, обычно гораздо проще для поддерживаемсяости использовать не горизонтальное деление - слои, а вертикальное - разделы. При этом используя как можно меньше псевдоабстракций. С повторным использованием, всё еще проще - 90% кода повторно не используется. На практике это выглядит так: прямо в коде MVC-контроллера берём сессию, строим запрос, бросаме результат во ViewModel. Просто, понятно, быстро, тестируемо. Profit. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 19:02 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtorНа практике это выглядит так: прямо в коде MVC-контроллера берём сессию, строим запрос, бросаме результат во ViewModel. Просто, понятно, быстро, тестируемо. Profit. То есть весь BL в контроллере? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 19:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtorВ общем, в процессе работы по принципу Repository over Nhibernate пришёл к пониманию, что мне просто не хватает возможностей, которые есть в NH, и я потихоньку привожу Repository к ISesson. Не путай божий дар с яичницей. В NH ты в любом случае будешь строить свой репо, т.к. его нет. А EF уже и сразу автогенерит тебе его, бери и используй. Но находятся идиоты типа севы, которые этои репо еще разок обвязывают в свой репо. SolYUtorпрямо в коде MVC-контроллера берём сессию, строим запрос, бросаме результат во ViewModel. Просто, понятно, быстро, тестируемо. Profit. Жесть, причем убийственная... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 19:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонЭто из плюсов, а минусов тоже не мало. Pros and Cons of Data Transfer Objects Как на пример туева хуча дата шейпов, чуть ли не на каждый запрос. Да, ничего не поделаешь. Но не вижу особого ужаса в этом, просто грамотно по неймспейсам (каталогам) классифицируем "шейпы" в проекте и поддерживаем это добро. Зато какой порядок и чистота будет в BL, как легко будет поддерживать и развивать такую архитектуру. Мне кажется, с самого начала не стоит жмотиться DTO, и начинать сразу писать правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 19:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУпрямо в коде MVC-контроллера берём сессию, строим запрос, бросаме результат во ViewModel. Просто, понятно, быстро, тестируемо. Profit. Жесть, причем убийственная... А что тут убийственного? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 20:41 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Где-то в степиА что тут убийственного? Чтение БД с логикой в контроллере... Действительно, а что тут убийственного? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 20:44 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУДа, ничего не поделаешь. Но не вижу особого ужаса в этом, просто грамотно по неймспейсам (каталогам) классифицируем "шейпы" в проекте и поддерживаем это добро. Зато какой порядок и чистота будет в BL, как легко будет поддерживать и развивать такую архитектуру. Мне кажется, с самого начала не стоит жмотиться DTO, и начинать сразу писать правильно. Ну это ладно, а скажем если я хочу добавить такую логику в модель: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
И передать куда то такой дто: Код: c# 1. 2. 3. 4. 5. 6.
Как бы такое провернуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 20:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУГде-то в степиА что тут убийственного? Чтение БД с логикой в контроллере... Действительно, а что тут убийственного? какая логика, вытащить модель из базы и размазать по контроллеру - все в returne что бы не пачкать тело метода? 50 проц основные нужды.. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:06 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУГде-то в степиА что тут убийственного? Чтение БД с логикой в контроллере... Действительно, а что тут убийственного? какая логика, вытащить модель из базы и размазать по контроллеру вьюхе - все в returne что бы не пачкать тело метода? 50 проц основные нужды.. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:06 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонТо есть весь BL в контроллере? МСУВ NH ты в любом случае будешь строить свой репо МСУЖесть, причем убийственная... Код: c# 1. 2. 3. 4. 5. 6.
Такой запрос использован один раз, прямо в контроллере. DAL, Repository и тд. уже есть в виде сессии, дополнительные обёртки не нужны. Логика в классе Order, а не в контроллере. Усложнять код, вводя новые слои, классы и т.д. не нужно. В реале есть пара Extension методов для постраничной выборки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:13 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosSeVa, ну сама модель ОДата такая ж фигня как и ЕФ и т.д. кроме Сущноси и Связи нет ничего при это Сущность понимается как таблица в БД нет понятия Схемы (именованный набор Связанных сущностей) вот говрим Накладная и подазумрваем как минимум 2 Сущности - Шапка и Строки и связь между ними(в Випросе это макротип) но в отдельности эти сущности нафиг никому не нужны кроме Мсушнего Идатасервис Связь между Ш и С сильная но тут же есть и слабыее связи - материал, ЕДИМ и т.д. при задании схемы (макротипа) надо в мета указать сильные и слабые связи, направление зависимости и т.д. а так из БД гоняете в БД фигня все это ViPRos, а не нужны никому эти жесткие связи и полное описание БД, тк смысл всех этих мультитков - уйти от зависимости структуры БД.Тк ООП и БД - две большие разницы. Помимо этого, нужны разные срезы данных(об этом говорилось в статье) Вместо с танцев с бубнами для описания можно спокойно содать view за пять минут, запустить кодогенратор, а дальше если есть нормальный фреймворк, то больше делать ничего не нужно, все и так подхватится. всесто БД - черный ящик, который предоставляет нужные интерфейсы. Помимо нее могут разные постащики данных(внешние сервисы, файлы, очереди сообщений, голубиная почта и тд). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:30 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtorLord BritishДавайте все же вернемся к EF, UOW, REPO и потроллим друг-друга на тему надо/не надо. К сожалению, в тему заглянули только штатные тролли, поэтому развести дискуссию по существу будет напряжённо. :) Могу лишь изложить поподробнее своё мнение. Сам прошёл путь Stored Procedure -> NHibernate -> Repository over Nhibernate -> NHibernate -> NoSQL (в процессе). В общем, в процессе работы по принципу Repository over Nhibernate пришёл к пониманию, что мне просто не хватает возможностей, которые есть в NH, и я потихоньку привожу Repository к ISesson. В итоге просто выкинул ненужным мне слой. И чуть позже наткнулся на хорошие блоги по этой теме: раз , два , и (особенно для любителей SOLID'а) три . Сам я тоже любитель SOLID. Но кроме него, надо держать в голове и свой разум. Ибо видел совершенно "солидный", но абсолютно неподдерживаемый код. И вдогонку. Вся эта суета вокруг слоёв вообще, и репозитория в частности задумывалась ради одной цели - сделать код более поддерживаемым за счёт повышения его понятности. И еще повторного использования кода. На самом деле, обычно гораздо проще для поддерживаемсяости использовать не горизонтальное деление - слои, а вертикальное - разделы. При этом используя как можно меньше псевдоабстракций. С повторным использованием, всё еще проще - 90% кода повторно не используется. На практике это выглядит так: прямо в коде MVC-контроллера берём сессию, строим запрос, бросаме результат во ViewModel. Просто, понятно, быстро, тестируемо. Profit. Пока ты это проходил и искал, я это давно прошел и давно говорил тебе, что не нужно писать кипятком от твоего хибернейта. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:33 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtorПарамонТо есть весь BL в контроллере? МСУВ NH ты в любом случае будешь строить свой репо МСУЖесть, причем убийственная... Код: c# 1. 2. 3. 4. 5. 6.
Такой запрос использован один раз, прямо в контроллере. DAL, Repository и тд. уже есть в виде сессии, дополнительные обёртки не нужны. Логика в классе Order, а не в контроллере. Усложнять код, вводя новые слои, классы и т.д. не нужно. В реале есть пара Extension методов для постраничной выборки. Если подобная логика в классе Order, то ты забрел не в ту степь. И здесь не соблюдается постоянно тобой цитируемый SOLID ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:37 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Nhibernate LazyLoading в многослойном приложении Вот одна из типичных проблем при использовании всех ORM. Начинают лепить городухи для ленивой загрузки, а они рассчитаны только под чистый CRUD ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 21:46 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонКак бы такое провернуть? Не понял, а в чем проблема? Где-то в степиМСУЧтение БД с логикой в контроллере... Действительно, а что тут убийственного? какая логика, вытащить модель из базы и размазать по контроллеру - все в returne что бы не пачкать тело метода? 50 проц основные нужды.. Чтение БД - это не логика, это чтение БД. А вот дальше идет логика. И тому и другому не место в контроллере. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:01 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУПарамонКак бы такое провернуть? Не понял, а в чем проблема? Где-то в степипропущено... какая логика, вытащить модель из базы и размазать по контроллеру - все в returne что бы не пачкать тело метода? 50 проц основные нужды.. Чтение БД - это не логика, это чтение БД. А вот дальше идет логика. И тому и другому не место в контроллере. Очередной детский лепет. Логика должна быть в контроллере ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:08 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Не понял, а в чем проблема? пропущено... Чтение БД - это не логика, это чтение БД. А вот дальше идет логика. И тому и другому не место в контроллере. Очередной детский лепет. Логика должна быть в контроллере ты идиот? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:32 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
сева, ты балбес http://ru.wikipedia.org/wiki/Model-View-Controller НазначениеОсновная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). Наиболее частые ошибкиНачинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:45 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУсева, ты балбес http://ru.wikipedia.org/wiki/Model-View-Controller НазначениеОсновная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). Наиболее частые ошибкиНачинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику 1. Ты выше утверждал, что контроллер не должен содержать бизнес-логику, а теперь даешь ссылку, где утверждается совершенно обратное. Сам себя макнул в собственно дермецо. 2. Все твои mvc, mvp, о которых ты слышал только в теории и объеме wiki для Эллочек-людоедок, я давно уже попробовал на зуб и выкинул за полной их непригодностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:58 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУНе понял, а в чем проблема? Нужно мапить модель к дто, а это лишняя дополнительная логика специально для дто. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 22:59 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУНе понял, а в чем проблема? Нужно мапить модель к дто, а это лишняя дополнительная логика специально для дто. Это левые танцы с бубнами, которые показывают убогость чистого ORM ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:05 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa1. Ты выше утверждал, что контроллер не должен содержать бизнес-логику, а теперь даешь ссылку, где утверждается совершенно обратное. Сам себя макнул в собственно дермецо. Тебе окончательно голову оторвало? Контроллер не должен содержать бизнес-логику, об этом пишется в статье. Ты читаешь жопой? Наиболее частые ошибки => контроллер содержит бизнес-логику Тебе даже википедию нельзя читать, иди пиродки пеки, бездарность. SeVa2. Все твои mvc, mvp, о которых ты слышал только в теории и объеме wiki для Эллочек-людоедок, я давно уже попробовал на зуб и выкинул за полной их непригодностью. Ты контроллер от модели отличить не можешь, дикарь, о каких зубах ты вещаешь? Иди в сад. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:21 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонНужно мапить модель к дто, а это лишняя дополнительная логика специально для дто. А дто не должна отмапливать сама, этим должен заниматься маппер - отдельный класс с тупыми статическими методами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:23 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaПарамонпропущено... Нужно мапить модель к дто, а это лишняя дополнительная логика специально для дто. Это левые танцы с бубнами, которые показывают убогость чистого ORM Дурень, о ORM речт вообще не идет. Разговор об уровнях BL <=> DTO. Пшел вон, не мешайся под ногами, ламер, пока дяди взрослые разговаривают. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa... ORM.... а они рассчитаны только под чистый CRUD Конкретно EF и в простом CRUD может интересно себя повести. например, при включенном Concurency можно схватить ошибок при апдейтах Order/Details, когда изменяются только Details Пример (многобукв) Пусть есть Order/Details Гавнакод, удаляет одну деталь и изменяет вторую. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Состояния entries в контексте Order - UNCHANGED Код: sql 1. 2. 3.
В базу отправляются только два запроса, версия Order остается не изменна Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т. е. при конкурентном доступе, второй пользователь может не увидет этих изменений, если он не работал с измененной/удаленной деталью. Так как у Order версия не поменяется. Чтобы работало как надо, прийдется вставить строчку Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И тогда все ОК, версия обновляется ОК. Код: sql 1. 2. 3.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
И это Connected сценарий . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:27 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVa1. Ты выше утверждал, что контроллер не должен содержать бизнес-логику, а теперь даешь ссылку, где утверждается совершенно обратное. Сам себя макнул в собственно дермецо. Тебе окончательно голову оторвало? Контроллер не должен содержать бизнес-логику, об этом пишется в статье. Ты читаешь жопой? Наиболее частые ошибки => контроллер содержит бизнес-логику Тебе даже википедию нельзя читать, иди пиродки пеки, бездарность. SeVa2. Все твои mvc, mvp, о которых ты слышал только в теории и объеме wiki для Эллочек-людоедок, я давно уже попробовал на зуб и выкинул за полной их непригодностью. Ты контроллер от модели отличить не можешь, дикарь, о каких зубах ты вещаешь? Иди в сад. Я тебе миллион раз говорил, чтобы ты подтирался своей вики сам. Она только для этого пригодна. Я не собираюсь читать это и вникать в твою дурь. Если не в контроллере, то где? В космосе, муфлон, она должна быть реализована? Во view и моdel ей не место ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:33 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
[quot SeVa]МСУпропущено... Тебе окончательно голову оторвало? Контроллер не должен содержать бизнес-логику, об этом пишется в статье. Ты читаешь жопой? Наиболее частые ошибки => контроллер содержит бизнес-логику Тебе даже википедию нельзя читать, иди пиродки пеки, бездарность. пропущено... Ты контроллер от модели отличить не можешь, дикарь, о каких зубах ты вещаешь? Иди в сад. Я тебе миллион раз говорил, чтобы ты подтирался своей вики сам. Она только для этого пригодна. Я не собираюсь читать это и вникать в твою дурь. Если не в контроллере, то где? В космосе, муфлон, она должна быть реализована? Только у мудаков она во view и моdel, которые ничего кроме вики в пять строк, осилить не могут \ ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:36 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ЗЫ Попроси взрослых поменять тебе подгузники на ночь и не путайся под ногами ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:37 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaЯ тебе миллион раз говорил, чтобы ты подтирался своей вики сам. Она только для этого пригодна. Я не собираюсь читать это и вникать в твою дурь. Дурень, тебе вникать просто нечем, это проблема не википедии, это проблема твой тупости. Обосрался ты сегодня знатно, очередной раз опускаем тебя на форуме. Какого оно, быть унылой кухаркой, поведай нем? SeVaЕсли не в контроллере, то где? В космосе, муфлон, она должна быть реализована? Во view и моdel ей не место Дятел тупорылый, в моделе и только в моделе. Не в контроллере, не во вью, не во вьюмоделе, не в репозитории. А в моделе. Заруби себе на носу, двоешник. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:39 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaЗЫ Попроси взрослых поменять тебе подгузники на ночь и не путайся под ногами Знатно ты лажанулась сегодня, кухарочка. Знатно. Как раз попкорн подоспел ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:41 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУА дто не должна отмапливать сама, этим должен заниматься маппер - отдельный класс с тупыми статическими методами. Понятно что не сама, но все таки необходимость лишних телодвижений. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 23:44 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУА дто не должна отмапливать сама, этим должен заниматься маппер - отдельный класс с тупыми статическими методами. Понятно что не сама, но все таки необходимость лишних телодвижений. Маппер, одна строчка кода для намапливания целого экземпляра (для простых свойств). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 00:07 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУМаппер, одна строчка кода для намапливания целого экземпляра (для простых свойств). Для простых автомаппер. Можно сделать отдельный класс для логики, получится чисто процедурный подход, но типизированный и с изоляцией ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 00:17 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУМаппер, одна строчка кода для намапливания целого экземпляра (для простых свойств). Для простых автомаппер. Можно сделать отдельный класс для логики, получится чисто процедурный подход, но типизированный и с изоляцией ) Да и автомаппер не нужен, еще левую сборку тянуть. Есть МСУ маппер :) http://codearticles.ru/Home/ArticleView/1383 Так у нас же есть модель, там м логика хорошо ляжет. А валидация - во вью моделях. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 00:27 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, Можно и так. Вообще стараюсь обходится простым projection по возможности. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 00:38 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaViPRos, а не нужны никому эти жесткие связи и полное описание БД, тк смысл всех этих мультитков - уйти от зависимости структуры БД.Тк ООП и БД - две большие разницы. Помимо этого, нужны разные срезы данных(об этом говорилось в статье) Вместо с танцев с бубнами для описания можно спокойно содать view за пять минут, запустить кодогенратор, а дальше если есть нормальный фреймворк, то больше делать ничего не нужно, все и так подхватится. всесто БД - черный ящик, который предоставляет нужные интерфейсы. Помимо нее могут разные постащики данных(внешние сервисы, файлы, очереди сообщений, голубиная почта и тд). а я считаю что нафиг не нужны структурные классы в коде, их надо описывать в метаданных и все а из метаданных создать БД и GUI тогда все финтифлюшки тира ОРМ , ДТО, ... нафиг не нужны ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 01:08 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosтогда все финтифлюшки тира ОРМ , ДТО, ... нафиг не нужны Датасеты? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 09:05 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, не объязательно кеш можно построить на любых коллекциях просто датасет уже готовая инфраструктура с релейшнами, констрейтами и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 10:09 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
вопрос для обсуждения. Есть репозиторий - стадарт КРУД + select ,where. Задача - поиск по названию некой сущности. Реализцется как поиск по названию по 3 колонкам. Вот куда это запихать лучше. 1. В интерфейс dao 2. Сделать напрямую в методе, которому это нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 11:30 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosкеш можно построить на любых коллекциях Вот он у нас и строится в EF на ICollection<T>. ViPRosпросто датасет уже готовая инфраструктура с релейшнами, констрейтами и т.д. В топку датасеты. netivan В репозиторий и клади или что-там у тебя. Насколько я знаю, ты куришь EF - уже копья сломал, нахрена тебе свой круд репозиторий, если в EF контекст и так уже репозиторий? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 12:01 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, в EF контекст это UnitofWork. Но тут вопрос даже не конкретно к ЕФ, а теоретический) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 12:11 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa Nhibernate LazyLoading в многослойном приложении Вот одна из типичных проблем при использовании всех ORM. Начинают лепить городухи для ленивой загрузки, а они рассчитаны только под чистый CRUD Если в процессе забивания гвоздя бьёшь молотком по пальцу, в этом молоток виноват, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 12:34 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
netivanМСУ, в EF контекст это UnitofWork Это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 12:42 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, ну как же не так, когда так) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 14:56 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtorLord BritishДавайте все же вернемся к EF, UOW, REPO и потроллим друг-друга на тему надо/не надо. К сожалению, в тему заглянули только штатные тролли, поэтому развести дискуссию по существу будет напряжённо. :) Могу лишь изложить поподробнее своё мнение. Сам прошёл путь Stored Procedure -> NHibernate -> Repository over Nhibernate -> NHibernate -> NoSQL (в процессе). В общем, в процессе работы по принципу Repository over Nhibernate пришёл к пониманию, что мне просто не хватает возможностей, которые есть в NH, и я потихоньку привожу Repository к ISesson. В итоге просто выкинул ненужным мне слой. И чуть позже наткнулся на хорошие блоги по этой теме: раз , два , и (особенно для любителей SOLID'а) три . Сам я тоже любитель SOLID. Но кроме него, надо держать в голове и свой разум. Ибо видел совершенно "солидный", но абсолютно неподдерживаемый код. И вдогонку. Вся эта суета вокруг слоёв вообще, и репозитория в частности задумывалась ради одной цели - сделать код более поддерживаемым за счёт повышения его понятности. И еще повторного использования кода. На самом деле, обычно гораздо проще для поддерживаемсяости использовать не горизонтальное деление - слои, а вертикальное - разделы. При этом используя как можно меньше псевдоабстракций. С повторным использованием, всё еще проще - 90% кода повторно не используется. На практике это выглядит так: прямо в коде MVC-контроллера берём сессию, строим запрос, бросаме результат во ViewModel. Просто, понятно, быстро, тестируемо. Profit. В три говорится только о необходимости перехода на чистый sql в долгосрочной ретроспективе. С принципам SOLID это можно сделать безболезненно, если им не следовать придется все перелопачивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 23:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtorSeVa Nhibernate LazyLoading в многослойном приложении Вот одна из типичных проблем при использовании всех ORM. Начинают лепить городухи для ленивой загрузки, а они рассчитаны только под чистый CRUD Если в процессе забивания гвоздя бьёшь молотком по пальцу, в этом молоток виноват, да? Бывают молотки, с которыми можно бить только себе по пальцам. Их нужно выбрасывать и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 23:27 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaЯ тебе миллион раз говорил, чтобы ты подтирался своей вики сам. Она только для этого пригодна. Я не собираюсь читать это и вникать в твою дурь. Дурень, тебе вникать просто нечем, это проблема не википедии, это проблема твой тупости. Обосрался ты сегодня знатно, очередной раз опускаем тебя на форуме. Какого оно, быть унылой кухаркой, поведай нем? SeVaЕсли не в контроллере, то где? В космосе, муфлон, она должна быть реализована? Во view и моdel ей не место Дятел тупорылый, в моделе и только в моделе. Не в контроллере, не во вью, не во вьюмоделе, не в репозитории. А в моделе. Заруби себе на носу, двоешник. Начинающий программист не делает различий между доменной логикой или бизнес-правилами(а'la: null, not null) и логикой приложения(бизнес логикой: отправить сообщение о поступлении оплаты, интеграция с внешними системами и тд). Это две большие разницы. Или ты предлагаешь интеграцию с платежной системой засунуть в модель Payment? Один уродец гадит, а второе дитятко эту каку в рот тащит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 23:40 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaБывают молотки, с которыми можно бить только себе по пальцам. Их нужно выбрасывать и все. Один из таких молотков ты, бестолочь. SeVaНачинающий программист не делает различий между доменной логикой или бизнес-правилами(а'la: null, not null) и логикой приложения(бизнес логикой: отправить сообщение о поступлении оплаты, интеграция с внешними системами и тд). Бездарь типа тебя не понимает, что предметная область в контроллере не пишется. Контроллер - тонкий Glue Layer, которому до бизнес-логики, как тебе до объектно-ориентированного программирования. SeVaЭто две большие разницы. Или ты предлагаешь интеграцию с платежной системой засунуть в модель Payment? Один уродец гадит, а второе дитятко эту каку в рот тащит. Интеграция с платежной системой реализуется в предметной области - совокупность доменных объектов, один из которых - Payment . Шагом марш читать букварь, недоросль. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2013, 23:49 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaБывают молотки, с которыми можно бить только себе по пальцам. Их нужно выбрасывать и все. Один из таких молотков ты, бестолочь. SeVaНачинающий программист не делает различий между доменной логикой или бизнес-правилами(а'la: null, not null) и логикой приложения(бизнес логикой: отправить сообщение о поступлении оплаты, интеграция с внешними системами и тд). Бездарь типа тебя не понимает, что предметная область в контроллере не пишется. Контроллер - тонкий Glue Layer, которому до бизнес-логики, как тебе до объектно-ориентированного программирования. SeVaЭто две большие разницы. Или ты предлагаешь интеграцию с платежной системой засунуть в модель Payment? Один уродец гадит, а второе дитятко эту каку в рот тащит. Интеграция с платежной системой реализуется в предметной области - совокупность доменных объектов, один из которых - Payment . Шагом марш читать букварь, недоросль. Ну-ну, давай-ка подробней, умник. Есть модель Payment и большая куча поставщиков для проведения оплат. Что будут делать в этом случае детки, которые кроме вики ничего не видели? Расскажи и повесели на ночь ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 00:04 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Один из таких молотков ты, бестолочь. пропущено... Бездарь типа тебя не понимает, что предметная область в контроллере не пишется. Контроллер - тонкий Glue Layer, которому до бизнес-логики, как тебе до объектно-ориентированного программирования. пропущено... Интеграция с платежной системой реализуется в предметной области - совокупность доменных объектов, один из которых - Payment . Шагом марш читать букварь, недоросль. Ну-ну, давай-ка подробней, умник. Есть модель Payment и большая куча поставщиков для проведения оплат. Что будут делать в этом случае детки, которые кроме вики ничего не видели? Расскажи и повесели на ночь Тупиздень, когда ты научишься думать. Создается новый конструктор, на входе которого будет подаваться Supplier, относительно которого будет поднотавливаться проводка. Причем тут контроллер? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 00:15 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaпропущено... Ну-ну, давай-ка подробней, умник. Есть модель Payment и большая куча поставщиков для проведения оплат. Что будут делать в этом случае детки, которые кроме вики ничего не видели? Расскажи и повесели на ночь Тупиздень, когда ты научишься думать. Создается новый конструктор, на входе которого будет подаваться Supplier, относительно которого будет поднотавливаться проводка. Причем тут контроллер? Ну, муфел, теперь осталось сделать последние потуги и выяснить, что никакой логики взаимодействия с платежными системами в Payment быть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 00:46 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Вернее, может, но только у мудаков, на которых ты ссылаешься ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 00:47 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Тупиздень, когда ты научишься думать. Создается новый конструктор, на входе которого будет подаваться Supplier, относительно которого будет поднотавливаться проводка. Причем тут контроллер? Ну, муфел, теперь осталось сделать последние потуги и выяснить, что никакой логики взаимодействия с платежными системами в Payment быть не может. Кухарка, ты сказала, что Payment это модель. Не путай божий дар с яичницей - дай угадаю, твоё скудное воображение «моделью» называет «дата-класс», предоставляющий абстракцию от БД? А теперь пшел вон читать букварь, в MVC модель - класс с бизнес логикой, никакого отношения к дата классу (EF, NH, L2S) не имеет. Опять двойка, садись. Твоя детская задача даже второгодниками, а у тебя трудности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 00:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaВернее, может, но только у мудаков, на которых ты ссылаешься Чудила, ты не ответил. Ну-ка, заряди еще раз напалмом - ты весь расчет хочешь запихнуть в контроллер? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 00:56 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaпропущено... Ну, муфел, теперь осталось сделать последние потуги и выяснить, что никакой логики взаимодействия с платежными системами в Payment быть не может. Кухарка, ты сказала, что Payment это модель. Не путай божий дар с яичницей - дай угадаю, твоё скудное воображение «моделью» называет «дата-класс», предоставляющий абстракцию от БД? А теперь пшел вон читать букварь, в MVC модель - класс с бизнес логикой, никакого отношения к дата классу (EF, NH, L2S) не имеет. Опять двойка, садись. Твоя детская задача даже второгодниками, а у тебя трудности. Опять путаница в показаниях, чмошник. То у тебя Payment, то Provider, а теперь бредни с EF. Что такое модель можешь писать статейки в русской вики , там твои бредни не будут выделяться на общем фоне. И так внятно объясни, что где и как. Приплюсуй сюда еще отправку сообщения после оплаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 01:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaОпять путаница в показаниях, чмошник. То у тебя Payment, то Provider, а теперь бредни с EF. Что такое модель можешь писать статейки в русской вики , там твои бредни не будут выделяться на общем фоне. И так внятно объясни, что где и как. Приплюсуй сюда еще отправку сообщения после оплаты. Чтобы что-то внятно объяснить унылой обезьяне, она должна обладать хоть малым представлением о уровене объектов предметной области. Учу неуча, классический MVP подход: IDataProvider нужен для извлечения информации из БД (PaymentDb, PaymentDetailDb, PaymentTypeDb) и намапливания на DTO болванки (PaymentDTO) Модель (Payment, а лучше назвать PaymentModel, чтобы не было путаницы с data-классами) взаимодействует с PaymentDTO и ISupplier и рассчитывает логику. new PaymentModel(ISupplier, PaymentDTO) Контроллер тупо обращается к IDataProvider, инстанциирует PaymentModel и снимает расчет. Отправку данных по счетам или что там у тебя, реализуется точно так же в PaymentModel. Сам контроллер ни в коем случае не реализует бизнес логику, дурень. P.S. Лишь в самых простых случаях некоторые идут на экономию (что-бы не плодить DTO) и пропихивают через контроллер в представление - сам data-класс (PaymentDb и иже). Впринципе, приемлемо для случаев, где особо никакой логики не нужно, кроме как вытащить данные из БД и отобразить их во вью. RTFM: Model-View-Controller Ты мне на вопрос ответишь? 13769830 Хочу еще поглумиться над идиотом. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 09:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaОпять путаница в показаниях, чмошник. То у тебя Payment, то Provider, а теперь бредни с EF. Что такое модель можешь писать статейки в русской вики , там твои бредни не будут выделяться на общем фоне. И так внятно объясни, что где и как. Приплюсуй сюда еще отправку сообщения после оплаты. Чтобы что-то внятно объяснить унылой обезьяне, она должна обладать хоть малым представлением о уровене объектов предметной области. Учу неуча, классический MVP подход: IDataProvider нужен для извлечения информации из БД (PaymentDb, PaymentDetailDb, PaymentTypeDb) и намапливания на DTO болванки (PaymentDTO) Модель (Payment, а лучше назвать PaymentModel, чтобы не было путаницы с data-классами) взаимодействует с PaymentDTO и ISupplier и рассчитывает логику. new PaymentModel(ISupplier, PaymentDTO) Контроллер тупо обращается к IDataProvider, инстанциирует PaymentModel и снимает расчет. Отправку данных по счетам или что там у тебя, реализуется точно так же в PaymentModel. Сам контроллер ни в коем случае не реализует бизнес логику, дурень. P.S. Лишь в самых простых случаях некоторые идут на экономию (что-бы не плодить DTO) и пропихивают через контроллер в представление - сам data-класс (PaymentDb и иже). Впринципе, приемлемо для случаев, где особо никакой логики не нужно, кроме как вытащить данные из БД и отобразить их во вью. RTFM: Model-View-Controller Ты мне на вопрос ответишь? 13769830 Хочу еще поглумиться над идиотом. Тупая обезьянка, где ты в MVP нашел контроллер? То, что ты описываешь, никакого отношения к этому паттерну не имеет. И не скачи с ветки на ветку, ты утверждал, что вся бизнес-логика в МVС должна быть в Моdel. Опиши как этот бред будет выглядеть в этом случае. Забудь про свои DTO, EF и прочие мелочи, а то и так полный винегрет ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 12:10 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa Или ты предлагаешь интеграцию с платежной системой засунуть в модель Payment? Не совсем понятно, что такое модель Payment, но интеграцию с платежной системой я инкапсулирую в некий класс. Оплата ведь может происходить в разных контроллерах, не дублировать же логику. У вас модель это просто структура + дал, как я понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 12:23 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaТупая обезьянка, где ты в MVP нашел контроллер? То, что ты описываешь, никакого отношения к этому паттерну не имеет. Глупая кухарка, а где я что-то сказал про "контроллер в MVP"? У тебя, как всега, галлюцинации, купи очки и еще раз прочитай: речь о IDataService - это чисто MVP-шная фишка. SeVaИ не скачи с ветки на ветку, ты утверждал, что вся бизнес-логика в МVС должна быть в Моdel. Опиши как этот бред будет выглядеть в этом случае. Забудь про свои DTO, EF и прочие мелочи, а то и так полный винегрет Дятел, я тебе обрисовал 100% реализации задачи, как это делается, что тебе еще непонятно? Винегрет у тебя в голове, которая в контроллеры "бизнес-логику" засовывает. Иди учи матчасть, бестолочь. Тебе уже и Парамон вдалбливает в твой неокрепший моск, что логика с платежной системой инкапсулируется в некий класс - я тебя битый час уже вменяю о PaymentModel. Логика только в нем, а никак не в контроллере. P.S. Сева, ты опущенец. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 12:40 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонSeVa Оплата ведь может происходить в разных контроллерах, не дублировать же логику. Он этого не понимает. Более того, он не знает, что в том же ASP.NET MVC специфичный контроллер (только для этой платформы) и если потребуется логику перенести на тот же толстый клиент WPF, WinForms, Mobile, ... то контроллер уйдет в топку - нужен будет новый контроллер. В его случае он будет дублировать бизнес-логику. P.S. Очередный Севины бредни идиота... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 12:44 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, ты ссылку читал? Что не ясно из схемы? Контроллер через сервис (у меня это некий IDataService) взаимодействует с моделью (бизнес логика) и представлением, представление тупо берет из модели посчитанные данные и отрисовывает. Сходи в садик, там тебе дети разжуют. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 12:50 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVa, ты ссылку читал? Что не ясно из схемы? Контроллер через сервис (у меня это некий IDataService) взаимодействует с моделью (бизнес логика) и представлением, представление тупо берет из модели посчитанные данные и отрисовывает. Сходи в садик, там тебе дети разжуют. Ну, хоты бы что-то внятное. А теперь нарисуй диаграмму для такого Use case: 1.Провести оплату через провайдера. 2. Если оплата прошла успешно, то сопоставить ее с неоплаченными счетами. Если нет, то показать ошибку пользователю 3. Передать данные об оплате в 1С 4. Всем полностью оплаченным Счетам изменить статус на Оплачено. 5. Если есть полностью оплаченные Счета, то : - произвести уведомление Менеджеров по e-mail - запустить складской процесс по резервированию на складе - etc - etc Где здесь бизнес-логика и как ты ее будешь реализовывать исключительно в Мodel? Процессов несколько, возможны ветвления кто и как будет проводить их оркестровку? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 13:46 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУSeVa, ты ссылку читал? Что не ясно из схемы? Контроллер через сервис (у меня это некий IDataService) взаимодействует с моделью (бизнес логика) и представлением, представление тупо берет из модели посчитанные данные и отрисовывает. Сходи в садик, там тебе дети разжуют. Ну, хоты бы что-то внятное. А теперь нарисуй диаграмму для такого Use case: 1.Провести оплату через провайдера. 2. Если оплата прошла успешно, то сопоставить ее с неоплаченными счетами. Если нет, то показать ошибку пользователю 3. Передать данные об оплате в 1С 4. Всем полностью оплаченным Счетам изменить статус на Оплачено. 5. Если есть полностью оплаченные Счета, то : - произвести уведомление Менеджеров по e-mail - запустить складской процесс по резервированию на складе - etc - etc Где здесь бизнес-логика и как ты ее будешь реализовывать исключительно в Мodel? Процессов несколько, возможны ветвления кто и как будет проводить их оркестровку? О, беседа вернулась в конструктивное русло. Пишу с утюга, потому немношословен буду. Что вы понимаете под Model? Если Domain Model, то помимо Entity и Value objects в ней могут быть Domain Services, в них можно выносить логику, которой необходимо взаимодействовать с несколькими Entity/другими domain service'ами/посредством интерфесов с другими системами. Картинка выше останется без изменений. Вы сможете вызвать при таком подходе логику откуда угодно в пределах приложения или в разных приложениях, также протестиоовать сможете легко. У всяких фаулеров описано же. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 14:28 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
по ссылке As such some examples may help. Entities are usually big things like Customer, Ship, Rental Agreement. Values are usually little things like Date, Money, Database Query. Services are usually accesses to external resources like Database Connection, Messaging Gateway, Repository, Product Factory. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 14:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaНу, хоты бы что-то внятное. Тебе об этом "внятном" уже битый день тылдычат. SeVaА теперь нарисуй диаграмму... Ага, только сейчас возьму разбег. SeVa1.Провести оплату через провайдера. 2. Если оплата прошла успешно, то сопоставить ее с неоплаченными счетами. Если нет, то показать ошибку пользователю 3. Передать данные об оплате в 1С 4. Всем полностью оплаченным Счетам изменить статус на Оплачено. 5. Если есть полностью оплаченные Счета, то : - произвести уведомление Менеджеров по e-mail - запустить складской процесс по резервированию на складе - etc - etc 1. Код: c# 1. 2.
2. Код: c# 1.
3. Это интеграция, решается асинхронно и в другом контексте (Windows сервис, SSIS и т.д.). Задача не для PaymentModel. 4. Задача решается в другом контексте (Windows сервис, SSIS и т.д.). Задача не для PaymentModel. 5. Задача решается в другом контексте (Windows сервис, SSIS и т.д.). Задача не для PaymentModel. SeVaГде здесь бизнес-логика и как ты ее будешь реализовывать исключительно в Мodel? Процессов несколько, возможны ветвления кто и как будет проводить их оркестровку? Правильно, мухи отдельно, котлеты отдельно. Мухи - в модели, оркестрарий - в отдельном контексте. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 15:06 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
1. Никаких провайдерова в Payment быть не должно. Пользуясь твоей терминологией: мухи и котлеты отдельно 2. Какая-то хрень 3,4,5 и тд решаются не в Model В итоге никакой логики кроме persistens, мелких вычислений, элементарных проверок в ней быть не должно. В твоих русскоязычных вики пачкают только такие как ты, а ты это потом эут шняго развозишь по форуму ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 16:23 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, Допустим вся эта логика в контроллере. Получается довольно длинная портянка кода, нужно как то разносить это по функциям. к примеру: Код: c# 1. 2. 3.
Все эти методы тоже будут в контроллере? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 16:38 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa1. Никаких провайдерова в Payment быть не должно. Пользуясь твоей терминологией: мухи и котлеты отдельно Что такое у тебя Payment? Дата класс? Ни в дата классе, ни в DTO никаких провайдеров не должно быть. В PaymentModel (если логики много - можно и через некий new PaymentService(PaymentModel)) - должен быть провайдер, о котором ты писал выше. В данном случае в PaymentModel - бизнес логика, если у нас некий PaymentService - то логика размазывается и на него. Но это для особо замороченных случаев. Тебе рано про них еще знать. SeVa2. Какая-то хрень ...у тебя в голове. SeVa3,4,5 и тд решаются не в Model А ч о чем. SeVaВ итоге никакой логики кроме persistens, мелких вычислений, элементарных проверок в ней быть не должно. В твоих русскоязычных вики пачкают только такие как ты, а ты это потом эут шняго развозишь по форуму Интеграция между системами - это не логика модели. Периодическая проверка в неком сервисе и апдейт поля по какому-то признаку и рассылка - это не логика модели. Наличие признака и проверка его - это логика. У тебя каша в голове. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 17:21 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, Модель это просто передатчик (транспортная абстакция) если смотреть в дуплексном виде, между вьюхой и контроллером логику там зашивать я не вижу смысла, ну окромя валидации или трансляции подписки на изменение модели в двух словах это выглядит примерно так. Код: c# 1. 2. 3. 4. 5.
тут имеем все для проводки, результаты вкидываем обратно, вся логика на стороне. логика тут вообще по стороне, ее вообще может не быть если контроллер транслирует в одну сторону в плане модели Код: c# 1. 2. 3. 4.
[/SRC] ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 17:44 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Где-то в степиМСУ, Модель это просто передатчик (транспортная абстакция) если смотреть в дуплексном виде, между вьюхой и контроллером Если называть дата-модель (классы ORM) - моделью (в терминах MVC), то да. Но использовать дата-модель в качестве модели в MVC - моветон. Выльется боком. Итого, модель не просто передатчик, а именно класс с бизнес-логикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 17:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, Почему использование дата модели в трансляции в одностороннем порядке может выльется ? дата это простая абстракция, я ведь могу подкинуть сахарку, и будет как в первом классе: Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 18:32 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVa1. Никаких провайдерова в Payment быть не должно. Пользуясь твоей терминологией: мухи и котлеты отдельно Что такое у тебя Payment? Дата класс? Ни в дата классе, ни в DTO никаких провайдеров не должно быть. В PaymentModel (если логики много - можно и через некий new PaymentService(PaymentModel)) - должен быть провайдер, о котором ты писал выше. В данном случае в PaymentModel - бизнес логика, если у нас некий PaymentService - то логика размазывается и на него. Но это для особо замороченных случаев. Тебе рано про них еще знать. SeVa2. Какая-то хрень ...у тебя в голове. SeVa3,4,5 и тд решаются не в Model А ч о чем. SeVaВ итоге никакой логики кроме persistens, мелких вычислений, элементарных проверок в ней быть не должно. В твоих русскоязычных вики пачкают только такие как ты, а ты это потом эут шняго развозишь по форуму Интеграция между системами - это не логика модели. Периодическая проверка в неком сервисе и апдейт поля по какому-то признаку и рассылка - это не логика модели. Наличие признака и проверка его - это логика. У тебя каша в голове. Это у вас каша и писсуары в головах. авторЕсли называть дата-модель (классы ORM) - моделью (в терминах MVC), то да. Но использовать дата-модель в качестве модели в MVC - моветон. Выльется боком. Итого, модель не просто передатчик, а именно класс с бизнес-логикой. В огороде бузина, а в Киеве дядька. Все "если,то" выше - это и есть бизнес-логика, которую нужно обеспечивать и делается это не в Model и не в одной строчке очередного маразма из серии DataService автор PaymentSystem<Payment>>.ActivatePayment(item); В общем понятно, что ничего подобного ты не делал. Ковыряйся в говнокоде дальше и не вякай. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 18:37 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Где-то в степи, имхо я не согласен ни с тобой ни с севой, с моего имхо модель это "транспортный протокол" для функционирования системы представления, можно всунуть в нее бизнеслогику, можно и в контроллер ( это все стерпит) но все же если какие то действия нужно предпринимать на основе данных модели с клиента, все это надо выносить отдельно. что бы можно было, менять эти действия не трогая модель и контроллер. Если бл в контроллере предполагает это, почему бы нет, если в модели опять почему бы нет. Исходить нужно из изоляции -> тестирования и понятности кода для сопровождения. зы если рассуждать по стеку то стек всегда поднимется в контроллер, отсюда можно пошутить ( прагматично), что бл всегда будет в сонтроллере ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 18:47 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa автор PaymentSystem<Payment>>.ActivatePayment(item); В общем понятно, что ничего подобного ты не делал. Ковыряйся в говнокоде дальше и не вякай. Сева ты как упрямый фома В одном переулке Стояли дома. В одном из домов Жил упрямый Фома. Ни дома, ни в школе, Нигде, никому - Не верил Упрямый Фома Ничему. Приведи хоть пример своего - говнокода, вот честно сказать смотрю на твои посты где соглашаюсь где нет Но не разу в жизни не видел ни одной пделки от тебя ни одного примера. ну как так можно голословно и безапеляционно AAAA? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 18:57 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaЭто у вас каша и писсуары в головах. Сударь, оторви голову от зеркала и прочти ссылку, которую я тебе дал. SeVaВ огороде бузина, а в Киеве дядька. Все "если,то" выше - это и есть бизнес-логика, которую нужно обеспечивать и делается это не в Model и не в одной строчке очередного маразма из серии DataService Ты просто ушлепок - логика в контроллере не маразм? Иди читай буквари, недоросль, рано тебе еще на форумах выступать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 20:12 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Где-то в степиМСУ, Почему использование дата модели в трансляции в одностороннем порядке может выльется ? Я сто раз уже писал - независимость от ORM , бесшовная имплементация любого хранилища. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 20:14 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, а ты в этом смысле, ну почему же нет, вот и придумал к нему застежку ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 20:28 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Где-то в степиМСУ, а ты в этом смысле, ну почему же нет, вот и придумал к нему застежку Да в любых смыслах, база - это база, предметный слой - это предметый слой. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 20:53 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУГде-то в степиМСУ, Почему использование дата модели в трансляции в одностороннем порядке может выльется ? Я сто раз уже писал - независимость от ORM , бесшовная имплементация любого хранилища. Детский потуги говнокодера. Муся, предлагаю этому чудо-сервису дать название "Сделайте мне красиво". Чистый маппинг никому не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 21:28 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Где-то в степиSeVaпропущено... В общем понятно, что ничего подобного ты не делал. Ковыряйся в говнокоде дальше и не вякай. Сева ты как упрямый фома В одном переулке Стояли дома. В одном из домов Жил упрямый Фома. Ни дома, ни в школе, Нигде, никому - Не верил Упрямый Фома Ничему. Приведи хоть пример своего - говнокода, вот честно сказать смотрю на твои посты где соглашаюсь где нет Но не разу в жизни не видел ни одной пделки от тебя ни одного примера. ну как так можно голословно и безапеляционно AAAA? С моими поделками даже с тебя можно было бы стакан молока поиметь, после недели дрессировки, чтобы выучил несколько незамысловатых правил, тк кода нужно минимум ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 21:34 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaДетский потуги говнокодера. Муся, предлагаю этому чудо-сервису дать название "Сделайте мне красиво". Чистый маппинг никому не нужен. Иди в зоопарк, предложи писать логику в контроллере. Звери посмеются. SeVaС моими поделками даже с тебя можно было бы стакан молока поиметь, после недели дрессировки, чтобы выучил несколько незамысловатых правил, тк кода нужно минимум Да нету у тебя никаких поделок и небыло, все твои посты на форуме - пук в кусты. Да и чмырят тебя все кому не лезь, что не пост - то в мемориз. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 21:43 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУSeVaДетский потуги говнокодера. Муся, предлагаю этому чудо-сервису дать название "Сделайте мне красиво". Чистый маппинг никому не нужен. Иди в зоопарк, предложи писать логику в контроллере. Звери посмеются. SeVaС моими поделками даже с тебя можно было бы стакан молока поиметь, после недели дрессировки, чтобы выучил несколько незамысловатых правил, тк кода нужно минимум Да нету у тебя никаких поделок и небыло, все твои посты на форуме - пук в кусты. Да и чмырят тебя все кому не лезь, что не пост - то в мемориз. Ты еще не дорос, чтобы что-то понимать. Даже принцип единичной ответственности и то не осилил, да ты о нем даже не слышал. Одним говоришь, что применяй такой-то и такой-то паттерн, другим приходится полчаса объяснять что они из себя представляют, а ты у нас особый случай, тк нужен минимум год, чтобы до тебя что-то дошло. Ты до простого контроллера не дорос, а если начать рассказывать и показывать, что в действительности нужно, то у тебя крышу снесет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 22:11 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaТы еще не дорос, чтобы что-то понимать. Даже принцип единичной ответственности и то не осилил, да ты о нем даже не слышал. После того, как подсрачниками нашпиговали, ты можешь говорить что хочешь, у нас один принцип ответственности - опущенец Сева. SeVaОдним говоришь, что применяй такой-то и такой-то паттерн, другим приходится полчаса объяснять что они из себя представляют, а ты у нас особый случай, тк нужен минимум год, чтобы до тебя что-то дошло. Ты как был тупизднем, так им и останешься - я рассуждал только об одном паттерне, MVC (и MVP как производная). О IDataService это не паттерн, модель это не паттерн, контроллер это не паттерн. Перечитай ссылку на MS определения, хотя с твоим английским только кур ходить смешить. Даже дети поняли о чем речь, только у тебя у одно возникают вопросы. О чем это говорит? SeVaТы до простого контроллера не дорос, а если начать рассказывать и показывать, что в действительности нужно, то у тебя крышу снесет. У меня уже ее снесло. От твоего красноречия, являющимся ничто иным как беспросветной тупостью. Балбес ты, шурик. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 23:12 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa... А теперь нарисуй диаграмму для такого Use case: 1.Провести оплату через провайдера. 2. Если оплата прошла успешно, то сопоставить ее с неоплаченными счетами. Если нет, то показать ошибку пользователю 3. Передать данные об оплате в 1С 4. Всем полностью оплаченным Счетам изменить статус на Оплачено. 5. Если есть полностью оплаченные Счета, то : - произвести уведомление Менеджеров по e-mail - запустить складской процесс по резервированию на складе - etc - etc Где здесь бизнес-логика и как ты ее будешь реализовывать исключительно в Мodel? Процессов несколько, возможны ветвления кто и как будет проводить их оркестровку? Попробовал запилить согласно подходу DDD (Eric Evans - Domain Driven Design). В инфраструктурном слое, считаем что для интерфейсов реализации тупо ставят в очередь и возвращают управление сразу (а уже другие системы никак не связанные с этой занимаются рассылкой и т. п.). Иначе долго это все набивать на клаве всякие асинхронные вызовы/воркфлоу и т. п.. В приложении также портянка Sequence диаграм. Пример только чтобы показать какая логика где находится при подходе DDD. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 14:27 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Я совершенно не не знаком с предметной областью типа - банковская сфера, бухгалтерия и т. п.. Потому не зная, как оно семантически правильно называется на английском писал на русском. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 14:29 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Слои разбиты по неймспейсам, для примера не принципиально, в голове можем считать что это сборки. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 14:36 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishSeVa... А теперь нарисуй диаграмму для такого Use case: 1.Провести оплату через провайдера. 2. Если оплата прошла успешно, то сопоставить ее с неоплаченными счетами. Если нет, то показать ошибку пользователю 3. Передать данные об оплате в 1С 4. Всем полностью оплаченным Счетам изменить статус на Оплачено. 5. Если есть полностью оплаченные Счета, то : - произвести уведомление Менеджеров по e-mail - запустить складской процесс по резервированию на складе - etc - etc Где здесь бизнес-логика и как ты ее будешь реализовывать исключительно в Мodel? Процессов несколько, возможны ветвления кто и как будет проводить их оркестровку? Попробовал запилить согласно подходу DDD (Eric Evans - Domain Driven Design). В инфраструктурном слое, считаем что для интерфейсов реализации тупо ставят в очередь и возвращают управление сразу (а уже другие системы никак не связанные с этой занимаются рассылкой и т. п.). Иначе долго это все набивать на клаве всякие асинхронные вызовы/воркфлоу и т. п.. В приложении также портянка Sequence диаграм. Пример только чтобы показать какая логика где находится при подходе DDD. Молодец, весьма неплохо. Код: 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.
SyncPaymentData,_notificationService.Notify,_stockSystem.StartReservationProcess лучше всего выполнять в отложенном режиме и здесь весьма неплохо подходит CQRS и очереди сообщений с гарантированной доставкой. Сейчас поздно, завтра продолжим ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:51 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, Читаю сейчас о CQRS и Event Sourcing Фаулера и Грега Янга. Пока нет полной картины где ему место. Можете рассказать об опыте применения CQRS или может быть хорошо теоретически знаете этот подход было бы интересно почитать мнения о границах применимости, о целях применения и т. п.. И где ему место в этом примере. Пока что видится на основе прочитанного, что пытаются разделить писателей и читателей на всех уровнях, вероятно, с целью оптимизации отдельно Write БД и Read БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 22:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
В этом примере хоть я и брякнул, что авторВ инфраструктурном слое, считаем что для интерфейсов реализации тупо ставят в очередь и возвращают управление сразу (а уже другие системы никак не связанные с этой занимаются рассылкой и т. п.). На деле из задействованных в примере сервисов при таких вызовах авторvar systemLike1cResponse = _systemLike1C.SyncPaymentData(new SystemLike1CSpecificParameter()); var notifyResponse = _notificationService.Notify(new NotificationSystemSpecificParameter()); var stockResponse = _stockSystem.StartReservationProcess(new StockSystemSpecificParameter()); это прокатит только для сервиса уведомлений/сообщений менеджеров по почте. только в этом случае достаточно получить статус успешности постановки в очередь. тут действительно отдал в очередь и пусть другая система рассылки выбирает и отправляет до посинения не столь критично. хотя от требований бизнеса зависит. для остальных сервисов, насколько я понимаю мало получить статус успеха постановки в очередь. дле сервиса оплаты (что-то вроде банк клиента?) - надо получить возможно еще какие-то данные от платежной системы и т. п.. потому одной очередью тут не отделаться. для сервиса синхронизации с 1С или ей подобной - я даже не знаю что это за процесс, но уверен он долгоиграющий и данные от 1С тоже нужны про резервирование на складе - тоже самое я темный лес в этой специфике, но уверен от складской системы тоже какие-то данные получать нужно. и процесс долгоиграющий. Потому мне не совсем понятно где здесь возникнет CQRS, например. Было бы очень хорошо если бы в ветку набежали, кто с этим сталкивался и завязалась дискуссия . Опять же цель примера была посмотреть какая логика каком слою относится. Но теперь итересно уже другое - вот те моменты что описаны выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 23:36 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord British, Эрик Эванс фанат-теоретик DDD, хотя для общего ознакомления не воспрещается, конечно. Больше всего опасен фанатизм, видится мне. Простой слабоствязный компонент: ApplicationUI + ApplicationLayer + InfrastructureLayer. Меняешь свой ApplicationLayer на что-то другое, ApplicationUI продолжает так же работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 12:55 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Ошибка, конечно же IDataService в MVC контроллере. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 12:58 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishВ этом примере хоть я и брякнул, что авторВ инфраструктурном слое, считаем что для интерфейсов реализации тупо ставят в очередь и возвращают управление сразу (а уже другие системы никак не связанные с этой занимаются рассылкой и т. п.). На деле из задействованных в примере сервисов при таких вызовах авторvar systemLike1cResponse = _systemLike1C.SyncPaymentData(new SystemLike1CSpecificParameter()); var notifyResponse = _notificationService.Notify(new NotificationSystemSpecificParameter()); var stockResponse = _stockSystem.StartReservationProcess(new StockSystemSpecificParameter()); это прокатит только для сервиса уведомлений/сообщений менеджеров по почте. только в этом случае достаточно получить статус успешности постановки в очередь. тут действительно отдал в очередь и пусть другая система рассылки выбирает и отправляет до посинения не столь критично. хотя от требований бизнеса зависит. для остальных сервисов, насколько я понимаю мало получить статус успеха постановки в очередь. дле сервиса оплаты (что-то вроде банк клиента?) - надо получить возможно еще какие-то данные от платежной системы и т. п.. потому одной очередью тут не отделаться. для сервиса синхронизации с 1С или ей подобной - я даже не знаю что это за процесс, но уверен он долгоиграющий и данные от 1С тоже нужны про резервирование на складе - тоже самое я темный лес в этой специфике, но уверен от складской системы тоже какие-то данные получать нужно. и процесс долгоиграющий. Потому мне не совсем понятно где здесь возникнет CQRS, например. Было бы очень хорошо если бы в ветку набежали, кто с этим сталкивался и завязалась дискуссия . Опять же цель примера была посмотреть какая логика каком слою относится. Но теперь итересно уже другое - вот те моменты что описаны выше. Это прокатит для всех процессов, которые я перечислил, мало того, пригодно только отложенное выполнение, но для этого нужны очереди сообщений. Реальные варианты: - клиент приходит и оплачивает товары или услуги, ему мало интересно ждать и никто не будет держать его на время передачи данных в другие системы(нет соединения, идет закрытие месяца в 1С или накатываются изменения). Или если проблемы в одной из систем, то все остальные бизнес-процессы могут выполнятся тк в большинстве случаев они независимы(например, кладовщики для отправки груза после оплаты, могут даже не знать, что отправлялось сообщение о получении оплаты, а клиенту гораздо важнее полученный груз). Из того, что доводилось делать по подобной схеме в трех разных проектах(использовалась связка nCQRS c вправленными мозгами и nServiceBus): - обмен данными между распределенными БД и другими системами - запуск бизнес-процессов, получение данных из внешних систем В контроллере добавляется одна строчка CommadBus.Send(new PaymentCommad(payment)); Дальше нужно создать агрегированный домен и независимые обработчик событий. Поскольку в большинстве вариантов они независимы друг от друга, то это позволяет расширять систему с горизонтальным ростом сложности, а не вертикальным с перелопачиванием всего кода. Рекомендую CQRS Journey . Есть отличный букварь в том числе на русском и код с реальным примером. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 19:00 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, Вот, при более подробном описании процессов многое прояснилось. А то я даже не знал в какой степени эти процессы не зависимы и т. п.. Отдельное спасибо за ссылку, поставил в список на изучение. Как изучу, отыщу вас тут на форуме. Буду вопросы задавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2013, 00:18 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
2SeVa: киньте ссылку пожалуйста на "отличный букварь в том числе на русском", чего-то не нашел ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2013, 21:05 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SerP19832SeVa: киньте ссылку пожалуйста на "отличный букварь в том числе на русском", чего-то не нашел Видел только в печатном варианте(MIcrosoft Press) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2013, 09:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
В попытках понять UoW + Repository возник небольшой вопросик, как быть в такой ситуации? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 15:53 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
maratoss, не щекоча кишки EF никак, если хочется этой абстракции можно в интерфейс IUnitOfWork ввести метод Undo() или как вы его назавете и в реализации EfUnitOfWork реализовать метод. Я так и не понял выгоды от введения своих интерфейсов, (кроме тестирования с фэйко контекстами) в сложном приложении с поддержкой optimistic concurency и т. п.. это все выродится в исходные реализации EF context,dbset. поделитесь впечатлением от подхода по окончанию... интересно почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 16:49 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord Britishmaratoss, не щекоча кишки EF никак, если хочется этой абстракции можно в интерфейс IUnitOfWork ввести метод Undo() или как вы его назавете и в реализации EfUnitOfWork реализовать метод. Я так и не понял выгоды от введения своих интерфейсов, (кроме тестирования с фэйко контекстами) в сложном приложении с поддержкой optimistic concurency и т. п.. это все выродится в исходные реализации EF context,dbset. поделитесь впечатлением от подхода по окончанию... интересно почитать. Undo\Redo должен быть в моделе. Модель должна быть комплексной в виде графа, тогда не будет костылей а'la BindAndCreateIfNotExist(A a, B b). О том как это сделано без собственных лисапедов можно почитать и посмотреть в csla ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 08:33 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, наверное это зависит про какое undo/redo ведется речь, если ему при редактировании отдельной ентити надо отменить что-то IEditableObject есть, а если ему что-то вроде Rollback или Revert в противовес SaveChanges это уже другое. Я о последнем писал, помоему ему это надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 10:04 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord Britishнаверное это зависит про какое undo/redo ведется речь, если ему при редактировании отдельной ентити надо отменить что-то IEditableObject есть, а если ему что-то вроде Rollback или Revert в противовес SaveChanges это уже другое. Я о последнем писал, помоему ему это надо. Да, хотел узнать, в ситуации когда метод вызывает другие два, каким образом можно выполнить их в одной транзакции, чтобы можно было сделать rollback, если что-то пошло не так. SeVaО том как это сделано без собственных лисапедов можно почитать и посмотреть в csla Сейчас посмотрим. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 10:19 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
maratossLord Britishнаверное это зависит про какое undo/redo ведется речь, если ему при редактировании отдельной ентити надо отменить что-то IEditableObject есть, а если ему что-то вроде Rollback или Revert в противовес SaveChanges это уже другое. Я о последнем писал, помоему ему это надо. Да, хотел узнать, в ситуации когда метод вызывает другие два, каким образом можно выполнить их в одной транзакции, чтобы можно было сделать rollback, если что-то пошло не так. если вопрос только технический касаемо EF, то так Код: sql 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 11:02 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
maratoss, состояния Entity в памяти, тоже можно привязать к TransactionScope, чтобы по rollback оно делало Revert. Я не касаюсь зачем это может быть нужно, просто есть такая техническая возможность. Может запилю пример попозже, если интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 11:14 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
простейший memory-ресурс, участвовать может только в одной транзакции и контролировать только value-типы, по факту случай вырожден до тупой обработки уведомлений о commit/rollback Код: sql 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76.
пример использования Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
может когда понадобится, используешь идею приминительно к ef, может где еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2013, 16:51 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1350110]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
166ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 281ms |
0 / 0 |