Мой вопрос в основном о дизайне ООП и ОРМ.Я создаю модели в Zend для пользователей и групп и использую мапперы для БД (а также использую внедрение зависимостей).У меня есть реляционная таблица user_groups
для связи.Я пытаюсь найти лучший способ получить и настроить группы пользователей или пользователей группы.В настоящее время я рассматриваю 3 варианта, дайте мне знать, если я что-то забыл:
- Позаботьтесь о соединении таблиц БД в mapper, чтобы группы пользователей выглядели как часть модели User
- Добавление UserGroupsMapper: создание функций, таких как user-> addToGroup ($ group)
- Добавление UserGroupsMapper и Модель UserGroup: создание функций, таких как userGroup-> add ($ user, $ group)
Мысли о варианте 1:
Предполагается ли взаимно-однозначное соотношение между моделями и таблицами БД, или одна модель может представлять несколько таблиц?Если так, то когда это не будет хорошо?Другой пример: если у меня есть таблица color
и таблица color_type
(со строками типа «теплый» или «крутой»), содержит ли Color colorType в качестве переменной атрибута / экземпляра?Или он ссылается на ColorType как объект с помощью color_type_id
, или у него есть реальный объект ColorType как ивар?
Мысли о варианте 2:
Для такой функции, как user-> addToGroup ($ group), будет ли она вызывать метод UserMapper, который затем вызывает метод в UserGroupsMapper, илибудет ли вызывать метод в UserGroupsMapper напрямую?Насколько я понимаю, картограф должен абстрагировать модель от данных, но что это означает в отношении отношений между моделями?Предполагается, что модели должны знать, как они связаны, или только мапперы?
Мысли о варианте 3:
Добавление модели UserGroup создает возможность доступа к этой модели в контроллере,Должен ли контроллер группы знать отношения модели, такие как объекты userGroup, или он должен только делать что-то вроде сказать группе добавить пользователя?
Надеюсь, вопрос достаточно ясен.Я знаю, что это довольно сложно, но я пока не смог найти хорошего ответа.