|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
полудух т.е. пример - говно? Вообще, я ещё немного поковырялся в примере и вот что нашёл: https://github.com/dotnet-architecture/eShopOnContainers/blob/23992ed3249cd257ac5fc42b23f2864b2ddf347b/src/Services/Ordering/Ordering.API/Application/DomainEventHandlers/OrderStartedEvent/ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
А как же... CQRS, там, разделение на команды и запросы, где запись в командах, а чтение в запросах? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 02:47 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
полудух а вот это почему так объявляется (get/set)? и как именно используется в CQRS? полудух Код: c# 1.
Особенности данной реализации, инкапсуляция, чтобы никто не мог случайно или намеренно изменить значение. полудух т.е. пример - говно? Таки да, к сожалению :( ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 02:48 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
Вообще, идеального примера мне найти не удалось. Но во всех проектах нашлось много чего ценного и полезного. Поэтому нам приходилось использовать удачные находки и нарабатывать свои, конечно основываясь на теории и имеющейся практики, а также исходя из текущих и будущих задач. Сейчас хорошо, искать особо не нужно. Есть постоянно актуализируемый сборник: https://github.com/ddd-cqrs-es?language=c# (выбран фильтр C# для удобства) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 03:02 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
hVostt, имхо люди хотят халявы, статейки с примером на пару экранов а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. понимать когда и почему это всё придумывалось, как развивалась и как применяется сейчас это же слишком сложно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 10:18 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
полудух а вот это почему так объявляется (get/set)? и как именно используется в CQRS? полудух Код: c# 1.
С CQRS это никак не связано, это синтаксис языка С#, а CQRS это подход к архитектуре, причем довольно специфичный и подходящий только для весьма ограниченного числа систем ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 11:13 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
hVostt А как же... CQRS, там, разделение на команды и запросы, где запись в командах, а чтение в запросах? С CQRS тут все в порядке, Buyer тут является агрегатом, который сохраняется с помощью репозитория, а чтения тут нет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 11:21 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
StalkerS, что значит весьма ограниченного числа систем? В ozon используют CQRS. А там и электронная коммерция, и логистика, и склады, и биллинг, и туризм... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 12:49 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
В 2gis используют CQRS, и DDD, и Event Storming ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 12:55 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
skyANA а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. смысл их читать, если там деза: hVostt Понятно, что универсального решения нет. Но у Фаулеровского (от 2013 года) DDD никакого решения на этот счёт нет. Выкручивайтесь сами так сказать. hVostt Я Фаулера уважаю. Но это не значит, что буду слепо следовать его указаниям. Нужно пользоваться также и своей головой, и на опыте далеко не всё работает по написанному . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 13:40 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
Буча, кстати, пытался читать "ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОЕКТИРОВАНИЕ С ПРИМЕРАМИ ПРИМЕНЕНИЯ"... грёбаная дичь... там же 90% воды... чуть не утонул ( посмотрите на главу 12 "ADA. СИСТЕМА УПРАВЛЕНИЯ ДВИЖЕНИЕМ" - читать невозможно, кто так пишет про программирование систем... ГДЕ там про программирование?! Сплошная вода. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 13:46 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
другое дело Ален Голуб - "Верёвка достаточной длины, чтобы выстрелить себе в ногу" вот эта книжка лучшая по ООП и программированию в целом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 13:47 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
hVostt Вообще, я ещё немного поковырялся в примере и вот что нашёл: ... вот щас страшно было, да... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 13:50 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
полудух Буча, кстати, пытался читать "ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОЕКТИРОВАНИЕ С ПРИМЕРАМИ ПРИМЕНЕНИЯ"... грёбаная дичь... там же 90% воды... чуть не утонул ( посмотрите на главу 12 "ADA. СИСТЕМА УПРАВЛЕНИЯ ДВИЖЕНИЕМ" - читать невозможно, кто так пишет про программирование систем... ГДЕ там про программирование?! Сплошная вода. Да утырки этот Буч и его соавторы, вода и белиберда ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 14:20 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
Сначала сразу ссылку на этот пример хотел кинуть, с телефона было не удобно. Если я правильно понимаю, там большинство сервисов сами по себе - "Домены", и выделять внутри них какие-то поддомены - лишнее (видимо, в силу простоты, и демонстрации "не надо усложнять там где не надо", и "грести все под одну гребенку"). С ними понятно. Но, вот этот - Ordering - он содержит и, в том числе, домен. И там, например, есть в Код: c# 1. 2.
такой метод: Код: 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.
вроде это так инкапсулирована "чистая" логика домена. Но, как уже говорил Хвост, очень высок риск, что для её реализации могут потребоваться всякие запросы к своему контексту, или даже выйти за него. И вот с этим, собственно, и был связан первоначальный вопрос. Теперь первоначальный вопрос уточню так: 1) если есть полная уверенность, что можем инкапсулировать "чистую" логика домена, то размещаем её в корне агрегата? 2) если что-то сильно выйдет за рамки 1) - рефакторим - выносим в команды, все-равно деваться некуда, и рефакторинг это не исправление "ошибок", это реакция на новые требования? 3) но, если все-равно есть ненулевая вероятность 2), может, ну его нафиг 1) и сразу 2)? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 14:27 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
hVostt полудух т.е. пример - говно? Вообще, я ещё немного поковырялся в примере и вот что нашёл: https://github.com/dotnet-architecture/eShopOnContainers/blob/23992ed3249cd257ac5fc42b23f2864b2ddf347b/src/Services/Ordering/Ordering.API/Application/DomainEventHandlers/OrderStartedEvent/ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
А как же... CQRS, там, разделение на команды и запросы, где запись в командах, а чтение в запросах? вангую, что может автор хотел подчеркнуть, что все основное было в источнике события. и так как тут нет какой-то присущей именно команде логики, связанной с языком предметной области, все взял на себя домен, валидатор, то решил - "тут обойдемся репозиторием". Хотя, для единообразия ради, можно это было и в команде, наверное. такие моменты у меня и вызывают вопросы. не думаю, что это он так облажался. скорее всего не хватило выразительности DDD ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 14:53 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
hVostt полудух т.е. пример - говно? Таки да, к сожалению :( можешь выделить, что тебе особенно не понравилось, а как бы ты сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 15:43 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
skyANA hVostt, имхо люди хотят халявы, статейки с примером на пару экранов а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. понимать когда и почему это всё придумывалось, как развивалась и как применяется сейчас это же слишком сложно :) золотые слова! хотим халявы! есть какие-то более-менее приближенные к примеру комментарии? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 16:12 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
skyANA hVostt, имхо люди хотят халявы, статейки с примером на пару экранов а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. понимать когда и почему это всё придумывалось, как развивалась и как применяется сейчас это же слишком сложно :) список этих долбоебов слишком велик, а гарантий, что они там что то написали правильно - исчезающе мал ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 16:16 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
ViPRos skyANA hVostt, имхо люди хотят халявы, статейки с примером на пару экранов а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. понимать когда и почему это всё придумывалось, как развивалась и как применяется сейчас это же слишком сложно :) список этих долбоебов слишком велик, а гарантий, что они там что то написали правильно - исчезающе мал отбросим это. что хотел сказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 17:12 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
Уважаемые форумчане, Где то до кода, который приводится, должно быть написано, что мол код не является промышленным, а только служит иллюстрацией к описанию проблемы/паттерна в лучшем случае в каком то конкретном контексте. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 17:56 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
StalkerS hVostt А как же... CQRS, там, разделение на команды и запросы, где запись в командах, а чтение в запросах? С CQRS тут все в порядке, Buyer тут является агрегатом, который сохраняется с помощью репозитория, а чтения тут нет Если у вас архитектура строится на CQRS, значит любые изменения данных системы должны быть в командах. Если бы в приведённом коде обработчика события был бы вызов команды, было бы ок. Сейчас тут далеко не всё в порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 17:57 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
полудух skyANA а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. смысл их читать, если там деза: hVostt Понятно, что универсального решения нет. Но у Фаулеровского (от 2013 года) DDD никакого решения на этот счёт нет. Выкручивайтесь сами так сказать. hVostt Я Фаулера уважаю. Но это не значит, что буду слепо следовать его указаниям. Нужно пользоваться также и своей головой, и на опыте далеко не всё работает по написанному . Это не деза. Это люди, у которых ещё имеется собственные взгляды и мнения, которые не являются аксиомами. Знать различные точки зрения и подходы очень полезно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 17:59 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
Еще. Уважаемые форумчане, еже ли было б ВСЕ просто и однозначно, то мы б составили конкуренцию людям, которых нанимают вместо московских дворников. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 18:04 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
skyANA hVostt, имхо люди хотят халявы, статейки с примером на пару экранов а читать Гради Буча, Бертрана Майера, Мартина Фаулера, Эрика Эванса и др. понимать когда и почему это всё придумывалось, как развивалась и как применяется сейчас это же слишком сложно :) Общался с представителями других профессий :) Везде так. Есть различные подходы, порой противоречивые, но за которыми стоят уважаемые люди. Всегда хочется найти "единственно правильное решение", или близкое к нему. Особенно это выражается в начале пути, и у меня так было. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 18:05 |
|
DDD разнесение кода логики по классам
|
|||
---|---|---|---|
#18+
love_bach такой метод: Код: 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.
вроде это так инкапсулирована "чистая" логика домена. Но, как уже говорил Хвост, очень высок риск, что для её реализации могут потребоваться всякие запросы к своему контексту, или даже выйти за него. И вот с этим, собственно, и был связан первоначальный вопрос. Теперь первоначальный вопрос уточню так: 1) если есть полная уверенность, что можем инкапсулировать "чистую" логика домена, то размещаем её в корне агрегата? 2) если что-то сильно выйдет за рамки 1) - рефакторим - выносим в команды, все-равно деваться некуда, и рефакторинг это не исправление "ошибок", это реакция на новые требования? 3) но, если все-равно есть ненулевая вероятность 2), может, ну его нафиг 1) и сразу 2)? Во-первых, создание позиции заказа делегируется методу, который просто должен добавить эту позицию, а не менять существующие или делать что-то там ещё, поэтому сразу напрашивается рефакторинг: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Отвечая на вопросы: love_bach 1) если есть полная уверенность, что можем инкапсулировать "чистую" логика домена, то размещаем её в корне агрегата? 2) если что-то сильно выйдет за рамки 1) - рефакторим - выносим в команды, все-равно деваться некуда, и рефакторинг это не исправление "ошибок", это реакция на новые требования? 3) но, если все-равно есть ненулевая вероятность 2), может, ну его нафиг 1) и сразу 2)? Я придерживаюсь проверенного на практике мнения, что при использовании CQRS, все изменения необходимо производить только в командах. Это позволяет точно понимать что вообще с доменом происходит и где это искать. Не нужно делать поиск по всему проекту, а где же ЕЩЁ используется репозиторий, и где ждать жёсткого подсрачника при рефакторинге или при выпуске релиза. Размещая логику в аргегате, рано или поздно придёт понимание, что это не логика никакая. Это всего лишь методы, изменяющие агрегат. Добавить/удалить вложенную сущность (позиция заказа, например), изменить цену, количество, наименование и т.д. Или какая-то базовая примитивная валидация. Польза сомнительная, затраты существенные. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 18:18 |
|
|
start [/forum/topic.php?fid=18&msg=39910772&tid=1354817]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 406ms |
0 / 0 |