Ответы пользователя по тегу Паттерны проектирования
  • Принцип построения моделей БД для PHP?

    aldigit
    @aldigit
    Обсудили в скайпе. Теперь даже я понял :)
    Ответ написан
    3 комментария
  • Принцип построения моделей БД для PHP?

    aldigit
    @aldigit
    Здравствуйте, Владислав

    У Вас в профиле ссылка на очень хорошую книжку Мартина Фаулера: martinfowler.com/books.html#eaa

    Из неё про Active Record: martinfowler.com/eaaCatalog/activeRecord.html
    Data Table Gateway: martinfowler.com/eaaCatalog/tableDataGateway.html
    Data Mapper: martinfowler.com/eaaCatalog/dataMapper.html

    Теперь немного рассуждений из личного опыта.

    Привязка доменной модели к реляционной сложна исходя из следующих факторов:

    * Гранулярность (доменная модель часто имеет большую детализацию)
    * Наследование (нужно выразить в реляционной схеме данных)
    * Идентичность (определяется равенством но коде и ID в БД)
    * Ассоциации (один ко многим в коде выражается массивом, в схеме БД через внешние ключи)
    * Навигация по данным (в коде — ссылки, в схеме БД joins)

    В случае, если доменная модель сложна, и мы сталкиваемся со множеством перечисленных трудностей, то рекомендуется использовать Data Mapper. Это позволит доменным объектам не беспокоиться о существовании БД.

    Если предметная область не слишком сложная, то может быть удобным добавить Persistence методы к классам доменной модели (Active Record). Это облегчит программистам процесс написания сервисного кода.

    В случае, если доменная модель удобно ложится на реляционную схему, но мы всё равно хотим обособить SQL для соблюдения принципа персональной ответственности, то рекомендуется использовать Data Table Gateway

    Это довольно общие слова. Если уточните вопрос, буду рад уточнить и ответ :)
    Ответ написан
    Комментировать