Хорошая практика MVC

Предположим, у меня была база данных с двумя таблицами:

покупатель

Платежная информация

У таблицы 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?

Надеюсь, что это имеет смысл!

-2

Решение

Вы не должны полагаться на контроллеры, чтобы сделать это. Поместите логику в вашу модель, за уровень сервиса (если хотите), и вызывайте это из ваших контроллеров.

Вам также следует отменить настройку 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)

1

Другие решения

Всегда держите это в чистоте, вам не нужно загружать больше неиспользуемых методов, чем вы могли бы также сделать от клиента, который вы делаете, когда у вас есть какие-то параметры клиента, и вам нужно получить что-то связанное с этим, от оплаты вы делаете вещи, когда у вас есть некоторые параметры оплаты и вам нужно что-то выкопать От этого. Вы всегда можете использовать оплату или клиента или любые другие модели с любого контроллера, поэтому держите его в чистоте, как вы можете GL и HF;)

-1

По вопросам рекламы [email protected]