Ответы пользователя по тегу ООП
  • Как получать один объект в разных запросах?

    @miksir
    IT
    То, что вы говорите - называется патерном Identity Map и реализовано в некоторых ORM системах, например, в Doctrine.

    > Вот вопрос, как сделать так, чтобы можно было использовать единый метод для получения объектов user?

    Получая данные из базы проверять - есть ли в кеше сущность с таким же идентификатором.

    > Или все-таки это правильно, создавать новый объект в каждом запросе

    Правильно, имхо, что бы был только один объект с одним идентификатором, а если нужно иное поведение - сказать это отдельно.
    Ответ написан
    Комментировать
  • Правильно ли использовать __call так?

    @miksir
    IT
    __сall вызывается только если метода в классе нет, по-этому в вашем случае будете разное поведение при обращении к объекту извне и при обращении внутри класса, что не есть хорошо.
    Ради экономии одной строчки с return такое не стоит делать.
    Если уж делать, то полностью магию убрав setPreset вообще, или используйте IDE, который умеет генерить fluent setter
    Ответ написан
    3 комментария
  • DDD Agregate, Entity, Repository понятным языком?

    @miksir
    IT
    Entity - сущность бизнеса. То, что еще называют "моделью", хотя этот термин так засрали, что лучше и не вспоминать про него. С чем работает наша проблемная область? С Клиентом, с менеджером, с заказов, с товаром - это и будут сущности. Важный момент - у сущности есть уникальный идентификатор.

    Репозиторий - это коллекция сущностей, паттерн по управлению сущностями. Из репозитория мы их получаем, в репозиторий отправляем. Конкретная реализация репозитория на persistence уровне уже занимается сохранением и поиском сущностей в базах данных.

    С аггрегатом и просто и сложно. Когда мы проектируем нашу предментую область, мы можем выделить такие сущности, которые не должны использоваться в отрыве от какой-то другой. Например, есть сущности "конкурс" и "фото на конкурс". Последняя не может существовать без конкурса, не может использоваться без него. При этом, именно "конкурс" мы будем спрашивать - сколько фото пришло. Удаляя конкурс - нужно удалить все фото этого конкурса. В таких случаях, мы определяем сводные (aggregate) границы и выделяем главную сущность (aggregate root или сводный корень). Ссылаться "извне", т.е. из других сущностей, не входящий в аггрегат мы можем только на сводный корень. Запрашивать из репозитория можем только сводный корень. И т.п., там много ограничений. Основная идея тут - инкапсулировать взаимодействие связанных сущностей внутри сводных границ, упростив таким образом глобальные взаимодействия.
    Ответ написан
    4 комментария