Предположим, у меня была база данных с двумя таблицами:
покупатель
Платежная информация
У таблицы customer были поля: имя, адрес, payment_info_id
payment_info_id — это внешний ключ, который ссылается на строку в payment_info. payment_info имеет поля: id (который связан с payment_info_id), банк, номер счета.
Из-за логики моего приложения каждый раз, когда создается клиент, его платежная информация сохраняется в отдельной строке в поле payment_info, которая связана с его строкой в таблице customer.
Я использую архитектуру MVC.
Имеет ли смысл сохранять это «чистым» и создавать две отдельные модели, по одной для каждой таблицы, а затем перекрестно загружать их и вызывать методы из payment_info_controller в customer_controller, или создать гибридную модель, которая, как только она создаст строку в customer также создает один в payment_info?
Надеюсь, что это имеет смысл!
Вы не должны полагаться на контроллеры, чтобы сделать это. Поместите логику в вашу модель, за уровень сервиса (если хотите), и вызывайте это из ваших контроллеров.
Вам также следует отменить настройку FK. Вставьте идентификатор клиента в payment_info и удалите его payment_info_id из клиента. Это позволит клиенту иметь несколько платежей.
в контроллере:
$user = new User(name, etc...);
$payment = new Payment(payment details...);
$user->applyPayment($paymentInfo);
$userService->save($user)
в сервисе:
function save($user){
//save user and update it with an id)
$user = $userDal->save($user);
//now that user has an id, you can generate/save payments.
$payment->save($user->getPayments());
}
Затем можно было бы сделать так, чтобы userService загружал слой доступа к данным как для пользователя, так и для оплаты.
Сервис / Информация о фасаде: http://www.dofactory.com/net/facade-design-pattern
ПРИМЕЧАНИЕ. — Возможно, вы захотите придумать лучшее соглашение об именах, поэтому очевидно, что платеж будет сохранен / сгенерирован этой конкретной службой. например, SaveUserAndPayment ($ user)
Всегда держите это в чистоте, вам не нужно загружать больше неиспользуемых методов, чем вы могли бы также сделать от клиента, который вы делаете, когда у вас есть какие-то параметры клиента, и вам нужно получить что-то связанное с этим, от оплаты вы делаете вещи, когда у вас есть некоторые параметры оплаты и вам нужно что-то выкопать От этого. Вы всегда можете использовать оплату или клиента или любые другие модели с любого контроллера, поэтому держите его в чистоте, как вы можете GL и HF;)