Это надуманный пример, смысл вопроса - как правильно уйти от anemic models.pepperAndSaltByTheSecretKeyFor накуя?
Это надуманный пример, смысл вопроса - как правильно уйти от anemic models.pepperAndSaltByTheSecretKeyFor накуя?
А че гуглить-то, ты используешь термины, значения которых сам не понимаешь и трактуешь как тебе хочется. Суть проблемы — получить поведение в сущности с помощью внешнего сервиса. Ты говоришь, что поможет aggregate root, который тоже сущность, ты не понял вопроса?Друг, у тебя пальцы сломаны и ты загуглить не в состоянии? Про сводные корни даже в википедии написано.
я понял, что не в темеЭто надуманный пример, смысл вопроса - как правильно уйти от anemic models.
Ты серьезно, или опять троллишь?$user->changePasswordHash($hash)?
Чейта не видел ничего про внешний сервис. Что за внешний сервис еще?А че гуглить-то, ты используешь термины, значения которых сам не понимаешь и трактуешь как тебе хочется. Суть проблемы — получить поведение в сущности с помощью внешнего сервиса. Ты говоришь, что поможет aggregate root, который тоже сущность, ты не понял вопроса?
А, так ты про Ерёму. http://phpclub.ru/talk/threads/Как-назвать-метод.79902/page-2#post-721827Чейта не видел ничего про внешний сервис. Что за внешний сервис еще?
Не вся, есть понятие domain service.И где находится сервисная логика в активной модели. Она находится в сущностях.
Речь идёт о примерно такой зависимости: http://thinkbeforecoding.com/post/2009/03/04/How-not-to-inject-services-in-entitiesПолучить поведение сущности с помощью внешнего сервиса, это создать контекст проблемы. Это очень легко понять, на примере циклических ссылок.
Можно я не буду тебе отвечать, если ты говоришь о своём?Получить поведение сущности с помощью внешнего сервиса, это создать контекст проблемы. Это очень легко понять, на примере циклических ссылок. Когда появляется ситуация циклических ссылок, то есть не совсем понятно кто от кого должен зависить и в какой класс добавлять метод. Это ситуация для разруливания с помощью сводного корня. Например, строки заказа зависят от заказа физически но не принципиально. Принципиально, это заказ содержит строки, а не наоборот. Реализовано может быть по-разному, но вся соль, что бы не колыхать этими проблемами потребителя. Что бы сделать реализацию ясной и прозрачной, используется сводный корень. Сечешь? Теперь на примере с чем-то имеющем связь с юзером и каким-то значением. Очевидно, что это "какое-то" значение можно охарактеризовать неким термином предметнойсущностиобласти. То бишь получаем 2 сущности предметной области объединяемые сводным корнем в некую третью. Хэши например, которые с одной сотороны зависят от приватного поля, а с другой с некой сущностью, не имеющей прямого отношения к юзеру. Это вообще может быть хеш, связанный с объектом любого класса из домена. Как это будет реализовано, никого не волнует. Будет ли оно хранить связи это вообще дело пятое и потребителей так же не колышет. Оно может, если надо. Основной смысл здесь не хранение, а контекст задачи.
А ещё раньше трава была зеленее. Вопрос терминологии был актуален всегда. Если ты говоришь на своём собственном языке, который понятен только тебе, то грош цена твоим тут высерам, потому что тебя никто не поймёт. Тот же ubiquitous language среди программистов. Если тебе насрать на терминологию, то будь последовательным и плюнь в лицо представителю бизнеса, который скажет, что «в нашей предметной области такое название будет некорректно».PS. Заметил такую штуку. Мода что ли пошла, пободаться насчет терминологии. Не совсем понимаю, это споры теоретиков чтоли? С практической точки зрения успешная архитектура это устойчивая к любым изменениям без лишнего перепила. Какая блин разница как оно называется с точки зрения потребительского кода? Сегодня этот класс был stateless и по этому назывался сервисом, а завтра мы решили кэшернуть для скорости и оно резко превратилось в entity? Да я вас умоляю, всем верхним по-х
Я про что-то типа http://culttt.com/2014/09/29/creating-domain-services/Ты серьезно, или опять троллишь?
Хотя, если есть Security сервис...
Товарищ, мне твои наезды по барабану. В нашем бизнесе круче тот, кто дольше и успешнее работает, а не тот кто умело цепляется к словам. Ты думаешь что entity это паттерн весь цимус которого must be persistent? Ну продолжай есть кактусы в попытках понять DDD.А ещё раньше трава была зеленее. Вопрос терминологии был актуален всегда. Если ты говоришь на своём собственном языке, который понятен только тебе, то грош цена твоим тут высерам, потому что тебя никто не поймёт. Тот же ubiquitous language среди программистов. Если тебе насрать на терминологию, то будь последовательным и плюнь в лицо представителю бизнеса, который скажет, что «в нашей предметной области такое название будет некорректно».
А причем тут domain? Ты же не будешь на уровне домена делать $em->persist. А всякие get/add, которые к персистенции отношения не имеют - ну ага.Раз PHP призван для того, чтобы умирать, то у нас должен быть механизм для сохранения и восстановления состояния Entity.
Невалидный аргумент. Может, у меня реализация на ReactPHP будет.Раз PHP призван для того, чтобы умирать
Если не ошибаюсь, то по Эвансу репозитории как раз вполне однозначно и являются частью домена. Ну, в домене по сути только интерфейс, а реализация работы с БД или другим хранилищем уже в инфраструктуре, конечно. Могу ошибаться, Эванса читал давно и так и не дочитал, отложил и руки не дошли вернуться...Вброс по поводу репозиториев.
Считаю, что репозитории должны быть на уровне домена, безусловно без непосредственной реализации.
С одной стороны, мы работаем с Доменом, с другой - мы уже пишем на PHP, и от этого никуда не деться - своеобразный слой инфраструктуры уже заложен в Домен... как и заложены ограничения PHP.
Раз PHP призван для того, чтобы умирать, то у нас должен быть механизм для сохранения и восстановления состояния Entity.
Мы заранее должны включить это в бизнес логику приложения.
Что думаете?
$repository = new Domain\UserRepository();
$user = $repository->get();
$user->setEmail('qwerty@qwerty');
$repository->save($user);
// А на уровне инфраструктуры что-то такое...
Infr\MySQLStorage
Infr\MongoStorage
Infr\PgStorage