Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Antonariyа почему не Get(userId), а new AccountByUserSpecification не спрятать в Get? Чтобы выполнялся принцип открыт-закрыт. Спецификаций может быть сколько угодно, и для этого не требуется трогать интерфейс репозитория. AntonariyAccountByUserSpecification вообще какой-то мутный класс, чье название больше подходит для функции. нафига под каждый способ выборки (ByUserName, ByUserPenisSize) класс городить? GetBy1способ, GetBy2способ по-моему логичнее. Логичней это выглядит только на школьном обучающем примере. В реальной жизни условий может быть множество, они могут быть сложные, комбинироваться друг с другом, подмешивать условия для безопасности и многое другое. Таким образом, твой репозиторий остаётся открытым для расширения и закрытым для модификаций, что весьма благоприятным образом сказывается на устойчивости архитектуры. GetBy1, GetBy2 — особенность разработки новичков и нубов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 10:44 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
Внес некоторые правки, добавил кэширование настроек https://github.com/fiqwenbv/ParrotWings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:44 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostt Чтобы выполнялся принцип открыт-закрыт. Спецификаций может быть сколько угодно, и для этого не требуется трогать интерфейс репозитория.Соответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? hVostt Таким образом, твой репозиторий остаётся открытым для расширения и закрытым для модификаций, что весьма благоприятным образом сказывается на устойчивости архитектуры.Не понял. "Мой репозиторий" это то, каким его представил я или каким он должен быть по твоим выкладкам, чтобы "благоприятным образом сказывался"? hVostt GetBy1, GetBy2 — особенность разработки новичков и нубовНовичок и нуб это одно и то же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 18:32 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyСоответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. AntonariyНе понял. "Мой репозиторий" это то, каким его представил я или каким он должен быть по твоим выкладкам, чтобы "благоприятным образом сказывался"? Ну да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? AntonariyНовичок и нуб это одно и то же :) Неа. Новичёк это чувак с полным отсутствием опыта. Нуб это чувак, которого опыт ничему не учит и он продолжает оставаться на уровне новичка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 18:53 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyСоответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. AntonariyНе понял. "Мой репозиторий" это то, каким его представил я или каким он должен быть по твоим выкладкам, чтобы "благоприятным образом сказывался"? Ну да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? AntonariyНовичок и нуб это одно и то же :) Неа. Новичёк это чувак с полным отсутствием опыта. Нуб это чувак, которого опыт ничему не учит и он продолжает оставаться на уровне новичка :) to hVostt Код: c# 1. а чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 19:41 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVosttпропущено... Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. пропущено... Ну да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен? пропущено... Неа. Новичёк это чувак с полным отсутствием опыта. Нуб это чувак, которого опыт ничему не учит и он продолжает оставаться на уровне новичка :) to hVostt Код: c# 1. а чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить так сказать "из каробки" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 19:45 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskа чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить Спецификация может получить нужные ей зависимости, а твой Expression не может. Так что не сравнивай одно место с пальцем. Как простейший учебный вариант покатит, но не в бою. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:46 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
to hVostt в дополнение к этому вопрос, с построением predicate для entity/list<entity> все понятно (на самом деле, мне не все понятно, там может подзапрос в "where" идти, типа "Id in ()"): так что этот шаблон применим штучно, там, где он действительно нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:48 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_taskа чем это не спецификация? тоже можно обернуть чем-то, и цепочки AND/OR строить Спецификация может получить нужные ей зависимости , а твой Expression не может. Так что не сравнивай одно место с пальцем. Как простейший учебный вариант покатит, но не в бою. можно пояснить на примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:50 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_task, Ещё лучше это абстракция запрос-обработчик, куда укладываются спецификации (объект-запрос), и прямой путь к разделению на читателя/писателя :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:51 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Ещё лучше это абстракция запрос-обработчик, куда укладываются спецификации (объект-запрос), и прямой путь к разделению на читателя/писателя :) не спорю, что есть случаи и их применения. тут это. пока, не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 20:56 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVostttest_task, Ещё лучше это абстракция запрос-обработчик, куда укладываются спецификации (объект-запрос), и прямой путь к разделению на читателя/писателя :) а почему Вас так читатели/писатели интересуют? CQRS? читал об этом, но, не работал с этой архитектурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 21:08 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttНу да, твой, ты предложил добавить GetBy1, GetBy2, это твоё видение, а не моё. По моим выкладкам я сказал, какому принципу это соответствует. С чем не согласен?Я просто не понял, к какой из реализаций относится фраза "благоприятным образом". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 21:33 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttс агрегатами доменной модели можете тут прояснить? у меня с этим опыт только как настроить маппинг NH (там так можно), чтобы "документ и его табличные части все разом сохранились (у них есть тоже зависимые объекты)". про это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 21:39 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskа почему Вас так читатели/писатели интересуют? CQRS? читал об этом, но, не работал с этой архитектурой. В данный момент мы активно используем DDD/CQRS/ES. Поэтому и интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 22:16 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyЯ просто не понял, к какой из реализаций относится фраза "благоприятным образом". Разумное следование принципам SOLID, мы говорили об одном из принципов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 22:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskможете тут прояснить? у меня с этим опыт только как настроить маппинг NH (там так можно), чтобы "документ и его табличные части все разом сохранились (у них есть тоже зависимые объекты)". про это? С натягом да, про это. В EF/NH корни агрегации можно выделить лишь условно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 22:19 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttAntonariyСоответственно AccountByUserSpecification тоже должен реализовывать какой-нибудь IAccount? Не, он должен реализовывать что-то типа ISpecification<TEntity>. Где под TEntity подставляется Account, например. А можешь дать сылку или набросать кратенький пример, раскрывающий смысл этого ISpecification<TEntity>. Хочу переделать под этот паттерн такой код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. И еще вопрос, связанный с этим кодом. IPQList<T> зависит не от интерфейсов, а от классов AjaxJsonGetResult и Paging, а это, насколько я понимаю, моветон. Или нет? Если да, то проблема в Paging (на AjaxJsonGetResult можно забить, это временная затычка пока студию не починят ): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Как быть в такой ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 18:13 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyА можешь дать сылку или набросать кратенький пример, раскрывающий смысл этого ISpecification<TEntity>. https://en.wikipedia.org/wiki/Specification_pattern ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 18:18 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
AntonariyА можешь дать сылку или набросать кратенький пример, раскрывающий смысл этого ISpecification<TEntity>. Хочу переделать под этот паттерн такой код: Конкретно особенностей реализации, их довольно много. Большинство из них базируются на Expression внутрях, но не все. Вот зачётный примерчик http://enterprisecraftsmanship.com/2016/02/08/specification-pattern-c-implementation/ AntonariyИ еще вопрос, связанный с этим кодом. IPQList<T> зависит не от интерфейсов, а от классов AjaxJsonGetResult и Paging, а это, насколько я понимаю, моветон. Или нет? Если да, то проблема в Paging (на AjaxJsonGetResult можно забить, это временная затычка пока студию не починят ): Ну вот у тебя пример по сути что-то типа Query Object, только неудачный, так как используется сериализация в строку, что выглядит как костыль для возможности работать с веб-приложением. Сериализация/десреиализация это вопрос, решающийся на стыке клиент-сервер, посмотри на ModelBinder к примеру. Не нужно это просовывать внутрь своих сервисов. Ужасно тяжко поддерживать, отлаживать и развивать. Paging может быть либо одним из комбинируемых спецификаций, либо базовой спецификацией. Результат запроса придётся также обобщить, так как тебе надо ещё общее количество элементов. Интерфейс IPaging опять же, у тебя решает несколько задач, и вообще по виду призван обслуживать прикладные запросы клиентского кода. Его в сервисах тоже не должно быть, на мой взгляд. Результат запроса по пейджингу: это срез + общее количество элементов. А IPageabe это больше относится к view model, так информация HasNext/HasPrevious и проч. нужна для презентации, в логике она не нужна. AntonariyОднако сделать зависимость IPQList от IPaging<TEntity> вместо Paging<TEntity> невозможно, поскольку Paging, реализующий IPaging<TEntity> немедленно требует конкретный <Entity>. Paging<TEntity> прекрасно справляется со всеми entity, и городить отдельный Paging для каждого entity совсем не хочется. Не, конечно не надо этого делать. Речь-то шла о спецификациях, а не о результатах запроса. Репозиторий может выглядеть так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. Для пейджинга отдельный метод. По моему же глубокому убеждение, методов, возвращающих коллекции репозиторий иметь не должен. Он должен уметь извлечь сущность из хранилища по ID, добавить и удалить. Всё. Остальное уходит на роль IQuery / IQueryProcessor / IQueryHandler<IQuery> — это намного гибче и не надо ходить по скользкому краю, постоянно матерясь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 18:57 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttPaging может быть либо одним из комбинируемых спецификаций, либо базовой спецификацией. на мой взгляд, Paging, не относится к спецификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:15 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVosttPaging может быть либо одним из комбинируемых спецификаций, либо базовой спецификацией. на мой взгляд, Paging, не относится к спецификации Я предложил ниже вариант, где не относится. Но если обобщить результат запроса, то можно и сделать спецификацией. Не вижу проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:21 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
hVosttОстальное уходит на роль IQuery / IQueryProcessor / IQueryHandler<IQuery> — это намного гибче и не надо ходить по скользкому краю, постоянно матерясь. тут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:22 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskhVosttОстальное уходит на роль IQuery / IQueryProcessor / IQueryHandler<IQuery> — это намного гибче и не надо ходить по скользкому краю, постоянно матерясь. тут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели в смысле, это его "минус" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:24 |
|
||
|
Тестовое задание
|
|||
|---|---|---|---|
|
#18+
test_taskтут кроме гибкости добавляется еще б о льшая уверенность в том, что ОРМ сгенерит "нужный SQL" (спецификация тут может подводить). но этот шаблон фактически означает написание готовых параметризированных запросов под разные, возможно, схожие цели Спецификация не отвечает за генерацию нужного SQL, за это отвечает провайдер. В случае EF, это LINQ провайдер. Поэтому подводить она не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:26 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39480643&tid=1355492]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 264ms |
| total: | 377ms |

| 0 / 0 |
