|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP19832МСУ Я не про orm, я про это Linq over WCF Ну я понял, BLT Linq провайдер идет же в комплекте с этой ORM. Ну ладно, не суть. Алексей КНу вот, опять... Вся логика крутится внутри одного сервера приложений. Про SOA я не говорил. Ну так в случае веба там тоже репозиторий крутится на сервере приложений. Только лапшекод из бизнес методов вынесен в отдельную абстракцию. Это как гавнокодить логику в обработчике кнопки :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:01 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КНу вот, опять... Вся логика крутится внутри одного сервера приложений. Про SOA я не говорил. Ну так в случае веба там тоже репозиторий крутится на сервере приложений. Только лапшекод из бизнес методов вынесен в отдельную абстракцию. Это как гавнокодить логику в обработчике кнопки :)Ну у меня WPF. Логика естественным образом отделяется от "морды" WCF-ом. :-) А в аспнете да, там есть соблазн запихать всё в контроллер. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:05 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Ну так в случае веба там тоже репозиторий крутится на сервере приложений. Только лапшекод из бизнес методов вынесен в отдельную абстракцию. Это как гавнокодить логику в обработчике кнопки :)Ну у меня WPF. Логика естественным образом отделяется от "морды" WCF-ом. :-)Это я к тому, что в следствие имеющейся архитектуры, мне дополнительные абстракции в виде слоя репозитариев на сервере приложений не нужны. Если я правильно тебя понял, у меня сетевая служба сервера приложения является репозитарием. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:20 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КНу у меня WPF. Логика естественным образом отделяется от "морды" WCF-ом. :-) А в аспнете да, там есть соблазн запихать всё в контроллер. :-) Милок, а чем идеологически твой толстый ServiceContract отличается от контроллера в ASP.NET? :) Лично считаю утолщать эти классы - зло. Нужна дополнительная абстракция и называется она - репозиторий. Отдельная сборка, твой ServiceContract ничего не должен знать о БД. Алексей КЭто я к тому, что в следствие имеющейся архитектуры, мне дополнительные абстракции в виде слоя репозитариев на сервере приложений не нужны. Если я правильно тебя понял, у меня сетевая служба сервера приложения является репозитарием. Нужны, Леша, нужны. Не спорь, а верь мне на слово. Не зря я писал про ограждение неофитов от тебя :) Не учи детей плохому! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:31 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КЭто я к тому, что в следствие имеющейся архитектуры, мне дополнительные абстракции в виде слоя репозитариев на сервере приложений не нужны. Если я правильно тебя понял, у меня сетевая служба сервера приложения является репозитарием. Нужны, Леша, нужны. Не спорь, а верь мне на слово. Не зря я писал про ограждение неофитов от тебя :)Бытует мнение, что недостаточная ответственность у класса не меньшее зло, чем наличие лишней ответственности. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:51 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУМилок, а чем идеологически твой толстый ServiceContract отличается от контроллера в ASP.NET? :)Тем, что в аспнет метод контроллера может содержать код, отвечающий за управление не только данными, но и View. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:54 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КНакой мне слой методов, содержащих только делегирование? Зачем же только делегирование? В контроллере ты можешь маппить dto и модели, писать условия в разрезе секурности, что-то анализировать и т.д. А потом вызывать честный репозиторий, передавать подготовленные аргументы, принимать результат, маппить его на dto, формировать текст и код ошибки, если она есть, и возвращать требуемый объект. Как видишь, контроллер (метод сервис контракта) это не тупо делегирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 11:57 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУМилок, а чем идеологически твой толстый ServiceContract отличается от контроллера в ASP.NET? :)Тем, что в аспнет метод контроллера может содержать код, отвечающий за управление не только данными, но и View. Ты заблуждаешься. В асп.нет контроллер ничего не знает о View, отдает только модель для представления. И тут тоже самое, по сути. Твой метод подготавливает ответ с конкретным DTO. На лицо аналогия. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:00 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КНакой мне слой методов, содержащих только делегирование? Зачем же только делегирование? В контроллере ты можешь маппить dto и модели, писать условия в разрезе секурности, что-то анализировать и т.д. А потом вызывать честный репозиторий, передавать подготовленные аргументы, принимать результат, маппить его на dto, формировать текст и код ошибки, если она есть, и возвращать требуемый объект. Как видишь, контроллер (метод сервис контракта) это не тупо делегирование.Ну всё правильно, в аспнет - да. Но в WCF? Я привёл выше реальный пример. Там будет только делегирование + атрибуты для безопасности. Обработка ошибок у меня централизованная, вынесена в ServiceBehavior. Мне контракт сервисов в интерфейсы лень выносить, а ты говоришь ещё добавить слой репозитариев... Зачем мне такое счастье? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:03 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Тем, что в аспнет метод контроллера может содержать код, отвечающий за управление не только данными, но и View. Ты заблуждаешься. В асп.нет контроллер ничего не знает о View, отдает только модель для представления.Ну он там может знать, а может и не знать. Например, в зависимости от каких-то условий вернуть разные вью. Но не буду спорить, я в аспнете пока не силён. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:06 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУМы сейчас говорим об внутреннем устройстве информационной системы. Оно должно максимально удобно поддерживаться и модифицироваться. Тут лишние слои только мешают. Это не интеграция со смежной системой, которая должна гарантировать определённый контракт. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:10 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КНу всё правильно, в аспнет - да. Но в WCF? Да какая разница? :) Что метод контроллера, что метод webapi контроллера, что метод odata контроллера, что operation contract метод, что метод веб сервиса. Никакой принципиальной разницы. Все эти методы должны честно общаться с middle слоем, который и представляет собой репозиторий. Вот о чем тут спич трется. Алексей КЯ привёл выше реальный пример. Там будет только делегирование + атрибуты для безопасности. Обработка ошибок у меня централизованная, вынесена в ServiceBehavior. Ну для каких-то элементарных методов может и будет делегирование, но это как правило редкость. Во многих случаях те же ошибки, информацию о прохождении валидации и т.п. пакуют в ответ. И это более правильный подход на мой взгляд, чем жить в рутине try/catch. Алексей КЗачем мне такое счастье? Ты про свой лапшекод в "обработчиках", который прибит к конкретной БД? :) http://msdn.microsoft.com/ru-ru/library/gg416511(v=vs.98).aspx Добавление репозитория При работе с платформой MVC не рекомендуется включать модель сущность-данные (EDM) или код какой-либо другой платформы доступа к данным в контроллер. Вместо этого нужно использовать шаблон репозитория. Репозиторий располагается между приложением и хранилищем данных. Репозиторий разделяет бизнес-логику и взаимодействие с исходной базой данных и объединяет все операции доступа к данным в одной области, что значительно упрощает создание и обслуживание данных. Репозиторий возвращает объекты из модели домена. В простых моделях, таких как та, которая используется в этом пошаговом руководстве, объекты, возвращаемые из EDM, LINQ to SQL и других моделей данных, квалифицируются как объекты домена. В более сложных приложениях может потребоваться слой сопоставления. Слой сопоставления не всегда оказывается неэффективным. Поставщики LINQ могут создавать эффективные запросы серверному хранилищу данных (то есть они могут отправлять запросы с использованием минимального числа промежуточных объектов). Для того чтобы использовать репозиторий, не требуются глубокие знания EDM, LINQ to SQL или каких-либо других моделей данных, с которыми работает пользователь. (Хотя LINQ не описывается в данном пошаговом руководстве, использование LINQ в качестве абстракции запросов означает, что механизм хранения данных можно скрыть. Благодаря этому можно, например, использовать SQL Server для производства, а LINQ to Objects в коллекциях в оперативной памяти — для тестирования.) Чтобы протестировать методы действий в контроллере, осуществляющие прямой доступ к модели EDM, необходимо подключение к базе данных, поскольку методы действий зависят от EDM (которая, в свою очередь, зависит от базы данных). В следующем примере кода показан контроллер MVC, использующий сущность "Контакт" модели EDM напрямую. Кроме того, из этого примера становится понятно, почему смешение вызовов базы данных в методах действий усложняет тестирование метода действия. Например, модульные тесты, изменяющие и удаляющие данные, изменяют состояние базы данных. Поэтому для каждого прохождения модульного теста требуется чистая база данных. Кроме того, вызовы базы данных расходуют большое количество ресурсов, а модульные тесты — незначительное количество ресурсов, поэтому их можно часто выполнять в ходе разработки приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:14 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУТы заблуждаешься. В асп.нет контроллер ничего не знает о View, отдает только модель для представления.Ну он там может знать, а может и не знать. Например, в зависимости от каких-то условий вернуть разные вью. Но не буду спорить, я в аспнете пока не силён. :-) Он не может знать о представлении. Без ну и но :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:15 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей Кв зависимости от каких-то условий вернуть разные вью. Вернуть вью - это не знать он них :) Он может вернуть "название вью", а доступ к представлению запрещен по сути даже самого паттерна MVC. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:17 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУВо многих случаях те же ошибки, информацию о прохождении валидации и т.п. пакуют в ответ. И это более правильный подход на мой взгляд, чем жить в рутине try/catch.Повторюсь, в WCF есть возможность централизовать обработку ошибок, написав соответствующий ServiceBehavior. В аспнете есть аналогичные возможности. Я же дал реальный пример, там нет ни одного try/catch. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:19 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей Кв зависимости от каких-то условий вернуть разные вью. Вернуть вью - это не знать он них :) Он может вернуть "название вью".Ну вот, это и есть логика управления представлением, о чём я и говорю. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:20 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУинформацию о прохождении валидации и т.п.При ошибках соапной валидации до вызова метода дело не дойдёт. А прикладная валидация - это часть прикладной логики, которая должна располагаться в репозитарии, если следовать декларируемым тобою принципам. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:23 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУ http://msdn.microsoft.com/ru-ru/library/gg416511(v=vs.98).aspx советы гореархитерторов поскипаныВот только не надо мне цитировать архитектурные советы гореархитекторов из Microsoft. Они в последнее время такого нагородили, что доверия к ним в ближайшие года не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:26 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУВо многих случаях те же ошибки, информацию о прохождении валидации и т.п. пакуют в ответ. И это более правильный подход на мой взгляд, чем жить в рутине try/catch.Повторюсь, в WCF есть возможность централизовать обработку ошибок, написав соответствующий ServiceBehavior. В аспнете есть аналогичные возможности. Я же дал реальный пример, там нет ни одного try/catch. Да не суть, есть возможность в wcf - и шут с ней. Я говорю о том, что нужно разделять бизнес-логику и взаимодействие с БД (или любым источником) + объединять все операции доступа к данным в одной области, что значительно упрощает создание и обслуживание данных . Вот основной момент. А как ты там обработаешь ошибку, второй момент. Алексей КНу вот, это и есть логика управления представлением, о чём я и говорю. :-) Это не "управление представлением" :) Алексей КМСУпропущено... Вот только не надо мне цитировать архитектурные советы гореархитекторов из Microsoft. Они в последнее время такого нагородили, что доверия к ним в ближайшие года не будет. Жжешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:29 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Вынес в отдельный рецепт: Рекомендация MS об использовании репозитория в MVC Оргаждаю неофитов... )) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:35 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУЯ говорю о том, что нужно разделять бизнес-логику и взаимодействие с БД (или любым источником) + объединять все операции доступа к данным в одной области, что значительно упрощает создание и обслуживание данных . Вот основной момент. А как ты там обработаешь ошибку, второй момент.Основной момент в том, что тут описано максимальное количество слоёв, которые можно реализовать в данной архитектуре. А вот нужны ли они мне все в моём конкретном случае - это уже моё личное дело, и если я какие-то слои посчитаю ненужными в данном проекте - никто не в праве осуждать меня за это. У меня одна из целей - сократить размер программы. Как ни крути, это один из наиболее эффективных способов сократить время разработки. МСУАлексей КНу вот, это и есть логика управления представлением, о чём я и говорю. :-) Это не "управление представлением" :)Называй это как хочешь. :-) МСУАлексей Кпропущено... Вот только не надо мне цитировать архитектурные советы гореархитекторов из Microsoft. Они в последнее время такого нагородили, что доверия к ним в ближайшие года не будет. Жжешь.Скорее плачу... Планета деградирует... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:38 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КОсновной момент в том, что тут описано максимальное количество слоёв, которые можно реализовать в данной архитектуре. Не максимальный, а минимальный. Можно добавить для более сложных случаев слой сопоставления . Описано в том же мануале от MS, который ты по непонятным причинам забраковал. Алексей КА вот нужны ли они мне все в моём конкретном случае - это уже моё личное дело, и если я какие-то слои посчитаю ненужными в данном проекте - никто не в праве осуждать меня за это. У меня одна из целей - сократить размер программы. Как ни крути, это один из наиболее эффективных способов сократить время разработки. Ну хочешь "гавнокодить в обработчиках" - твоё право. Но тема у нас - репозиторий, не забыл? :) Напоминаю, я некоторые еще товарищи объяснили автору, что IQueryable в репозитории - это зло. И объяснили почему. Ты встрял и начал ругаться на нас. В чем смысл твоих высказываний тогда, если тебе репозитории не нуждны? :) Алексей КСкорее плачу... Планета деградирует... Пойду попью кофейку, буду много думать об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:46 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУНу хочешь "гавнокодить в обработчиках" - твоё право."Гавнокодить" можно в любом месте. Наличие дополнительного слоя автоматически не избавляет от "говнокода". Более того, "гавнокод" в нескольких слоях гораздо хуже "гавнокода" в одном слое. МСУНо тема у нас - репозиторий, не забыл? :)Всё правильно. Мы говорим об их нужности в различных условиях. :-) МСУАлексей КСкорее плачу... Планета деградирует... Пойду попью кофейку, буду много думать об этом.Приятного аппетита. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 12:54 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей К"Гавнокодить" можно в любом месте. Наличие дополнительного слоя автоматически не избавляет от "говнокода". Так никто не заставляет от него избавляться, если тебе он так дорог. Речь идет о: МСУЯ говорю о том, что нужно разделять бизнес-логику и взаимодействие с БД (или любым источником) + объединять все операции доступа к данным в одной области, что значительно упрощает создание и обслуживание данных. Алексей КБолее того, "гавнокод" в нескольких слоях гораздо хуже "гавнокода" в одном слое. Смотря с какой стороны посмотреть :) Алексей КВсё правильно. Мы говорим об их нужности в различных условиях. :-) Не ссать людям в глаза врать! Речь была о IQueryable в контроллере, за который ты так рьяно выступал Не стыдно? :) Алексей КПриятного аппетита. :-) Спасибо :) P.S. Какой итог? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 13:00 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КНу могу дать другой пример. Не для слабонервных И где тут IQueryable для клиентов? :)+1 Пример к теме проблем репозитория вообще не относится. Репозитоий я могу использовать повторно в рамках одного проекта. В разных проектах. А метод GetMessageTaskView как мне использовать, кроме как в сервисе? Копипастить содержимое? Или сейчас начнётся: ну у меня одна база, один сервис, больше этот функционал нигде не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 13:02 |
|
|
start [/forum/topic.php?fid=17&startmsg=38416483&tid=1349917]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 255ms |
0 / 0 |