假设我有一个包含两个表的数据库:
客户
payment_info
表客户有字段:姓名,地址,payment_info_id
payment_info_id是链接到payment_info中的行的外键。 payment_info有字段:id(链接到payment_info_id),银行,帐号。
由于我的应用程序的逻辑,每次创建客户时,他们的付款信息都存储在payment_info字段的单独行中,该字段链接到客户表中的行。
我正在使用MVC架构。
保持这种“纯粹”并制作两个单独的模型(每个表一个,然后交叉加载它们并从customer_controller中的payment_info_controller调用方法,或者创建一个混合模型,它创建一个客户中的行还会在payment_info中创建一个?
希望这是有道理的!
答案 0 :(得分:1)
你不应该依靠控制器来做到这一点。将逻辑放在模型中,在服务层后面(如果需要),然后从控制器调用它。
您还应该反转FK设置。将客户ID粘贴在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 :(得分:-1)
始终保持纯净,你不需要更多未使用的方法来加载,而你也可以从客户那里做东西,而你有一些客户参与并需要得到与之相关的东西,从付款时你做的东西,当你有一些支付参数和需要从中挖掘一些东西。您可以随时使用任何控制器中的支付或客户或任何其他型号,因此请尽可能保持它的纯净和高效;)