[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: DDD в PHP
Страницы: 1, 2
Michael
"Обычно", "в большинстве случаев"... Ты же не работник статистического бюро чтобы обобщать?..
Люди прогают как их научили или не научили, но то их личный опыт, личные проблемы.

Цитата (twin)

Обычно сначала пишут класс, потом уже думают, какой получится объект.


Ну может и пишут сначала класс, если не изучали ООП, а изучат, будут например писать сначала тест, а потом будут проектировать объект, его роли и ответственности, выяснять их CRC карточками в том числе, выяснят и напишут код класса. smile.gif .

Цитата (twin)

Соответственно в большинстве случаев (особенно в фреймворках) объект выполняет роль набора типизированных данных, который гоняется по классам и уже они что то с ним делают. Обычный процедурный подход.

Как класс может с кем то что то сделать? Ты о статических методах класса?
Фреймворки не могут научить ООП.
То что ты описал, эту процедурку, так делать в рамках ООП не правильно, и это четко указано в литературе, кто интересуется прекрасно это понимает.


_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Цитата (twin)
Важно то, что объект может пользоваться любыми методами любого созвучного класса, оставаясь при этом неизменным.

Может ты что то осмысленное пытаешься этой фразой донести, но для меня это звучит как то
что объект в разных контекстах будет принимать на себя и выполнять разные роли(пользоваться любыми методами любого созвучного класса) что неверно с точки зрения SRP.

Цитата
объект жестко привязан к классу, то будет довольно сложно проектировать домен, ибо там только объекты.

в чем сложность?

_____________
There never was a struggle in the soul of a good man that was not hard
twin
Цитата (Michael @ 1.11.2018 - 08:40)
"Обычно", "в большинстве случаев"... Ты же не работник статистического бюро чтобы обобщать?..
Для меня, ежедневно проводящему кучу времени на форуме уже 10 лет, это очевидно. И не только на этом форуме, кстати. Так что могу претендовать на статистику. :D

Цитата (Michael @ 1.11.2018 - 08:40)
а изучат, будут например писать сначала тест, а потом будут проектировать объект, его роли и ответственности, выяснять их CRC карточками в том числе, выяснят и напишут код класса.
Хорошо, коли так. НО причем тут тесты? TDD крутая и очень полезная штука, однако как он коррелирует с принципами ООП? При всей его крутизне, это совсем не обязательная вещь.

Цитата (Michael @ 1.11.2018 - 08:40)
Как класс может с кем то что то сделать? Ты о статических методах класса?
Причем тут статика. Я говорю о том, что объект может вызвать любой метод класса, совершенно ничего о нем не зная. И при этом объект может быть построен в отрыве от класса, без всяческих new.

Цитата (Michael @ 1.11.2018 - 08:40)
То что ты описал, эту процедурку, так делать в рамках ООП не правильно, и это четко указано в литературе, кто интересуется прекрасно это понимает.
Однако делают. Одна только Active Record чего стоит. Хоть в Yii, хоть в Ларе.

Цитата
но для меня это звучит как то
что объект в разных контекстах будет принимать на себя и выполнять разные роли(пользоваться любыми методами любого созвучного класса)
Не будет, а может. Это разные вещи. SRP конечно никто не отменял, но для DDD этот принцип не совсем подходит. Ибо он большей частью касается именно классов, сиреч реализации. А проектирование не должно привязываться к реализации.

Вот если принять как должное, что объект - субстанция самостоятельная, тогда можно сначала спроектировать домен из объектов, а потом написать классы, которыми эти объекты будут управлять. По сути объект, это набор данных и ключ к классу. Что в классе творится, объект знать не должен. И не класс изменяет объект (VO вообще изменять нельзя), а объект сам изменяет свое состояние с помощью класса. Вот это понять трудно обычно, но когда люди это понимают, остальные вопросы отваливаются сами собой. Я на работе это проверил. :)

в чем сложность?

Сложность в том, что пока не научишься мыслить объектами, будешь в первую очередь думать о реализации. А DDD для того и придумали, чтобы было понятно не только программисту, но и заказчику, совершенно далекому от классов и методов.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
SlavaFr
Цитата (McLotos @ 30.10.2018 - 13:03)
1. Как организовывать домены в плане кода, вот с SOLID и MVC всё понятно, а вот тут вообще не ясно какие должны быть объекты, как они должны распологаться.
2. Зачем нужны ОЗ, если Сущности на много более функциональны?
3. Агрегаты vs Сущностей, не совсем понимаю, можно ли в сущности inject'ить другие сущности или это можно только в Агрегатах?
Вопросов еще много, но хотя бы с этим разобраться

Объекты должны распологаться как в любом другом проэкте smile.gif
Различия только в том, что в DDD только сождаётся дополнительная логическая прослойка, которая соответствует понятиям и функциям которые используются в реальной жизни.
То есть возьмём к примеру покупку в магазине. Имеется Покупатель, Магазин, Товар, Касса.
В DDD при описание процесса Продажа надо всё это описать, даже если у тебя нет ещё не конкретного товара и не покупателя.
Часто в DDD используется top to down программирование, то есть когда ты программируешь процесс не имея ещё конкретных классов. Таким образом у тебя и создаётся именно эта прослойка.
Как правили создают класс с названием процесса и в конструкторе передают интерфейсы всех участвующих в процессе актёров.
В методе который описывает процесс (как правило с названием run, или process) ты работаешь с интерфейсами и вызывая методы интерфейсов описываешь процесс, который ты хочешь вызывать.
Так же можно процесс назвать не run, или process, а рельным названием этого процесса, к примеру покупка, продажа, и.т.д...
После этого ты начинаешь уже создавать или брать уже имеющиеся объекты и подгонять их под интерфейсы которые ты используешь в твоём процессе при передаче в конструкторе.
И на конец ты при использование процесса должен всего лишь засунуть эти объекты в конструктор и вызвать нужную методу процесса.
Вот и всё.
Какую библиотеку ты потом используешь уже роли не играет и описанная в твоём процессе логика может вызываться вместе в любой библиотеке и даже использоваться как микросервис для вызова на уровне любых языков программирования.



_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.