В моем приложении у меня есть пользователи, организации и сотрудники. Для каждого из них есть и объекты базы данных.Должно ли это быть ответственностью контроллера или домена?
Когда пользователь изначально создает Организацию, я хочу автоматически создать запись сотрудника для этой комбинации Пользователь/Организация. (Тип записи будет «Владелец»). В основном это сводится к двум вставкам базы данных: один для организации, другой для Employee.
Я вижу два пути идти об этом:
- контроллера может создать новый объект организации и использовать картограф,
orgMapper::insert($newOrg)
, упорствовать его. После этого он может создать новый объект Employee и снова использовать mapper,employeeMapper::insert($newOwner)
, для сохранения. - Контроллер может создать новый объект Organization, и этот объект выполняет всю оставшуюся работу. Он будет вызывать
orgMapper::insert($this)
, и с возвращенным ключом будет создаваться и сохраняться новый объект Employee.
Во втором подходе есть ряд преимуществ: в модели встроена бизнес-логика (т. Е. Запись сотрудника/владельца для каждой новой организации), а контроллер более сложен. Единственная причина, по которой я сомневаюсь, это значит, что мой домен становится зависимым от моего картографа.
Я бы использовал фабрику в этом домене, чтобы получить картографию, так что вся связь будет сведена к одной точке. Означает ли это, что зависимость приемлема? Или у меня есть более глубокая проблема дизайна?
Я немного ознакомился с уровнем обслуживания. Возможно, это то, где я должен смотреть?
Я использую PHP и Zend Framework
Ваши мысли очень ценятся. Моя кошка и я исчерпали наши собственные идеи ...
Я бы больше посмотрел на сервисный уровень какого-то типа, который является единственным заданием, управляющим ссылочной целостностью db, и вынимает эту работу из отдельных карт данных. По крайней мере, хотя код, необходимый для этого, будет очень коротким, он должен предоставить вам многоразовые закодированные правила для управления другими проектами, которые работают с одним и тем же набором данных. ИМХО. Надеюсь, у меня есть смысл. Но, возможно, может быть функция уровня db, которую вы могли бы упустить, в зависимости от того, какое программное обеспечение db вы используете. Какую базу данных вы используете? –
@ bob-the-destroyer, я использую mySql –
какой движок для этих таблиц? Миисам или презерватив? –