我有2个关系表:
Purchase 1:m Payment
我为每个表都有一个DAO类。现在我想实现一个函数
List<Payment> findPaymentsByPurchaseId(int purchaseId)
为了让API感觉更直观,我应该将此功能放在
中你觉得哪一个更直观?
答案 0 :(得分:3)
我将它放在PaymentDAO
中,因为它正在返还付款,但我也会让它更通用
List<Payment> findByPurchase(Purchase purchase)
答案 1 :(得分:1)
可能会有多个地方。
在购买DAO中,您需要:
List<Payment> getPaymentsFor(Purchase) // or find..., or findByPurchase, or...
在付款DAO中,您需要:
Purchase getPurchaseFor(Payment)
(无论是ID还是对象更具哲学性而不是技术性;使用任何适用于你的东西。暴露ID可能被视为漏洞抽象,虽然它更像是认知的,因为拥有PK并不意味着< em>必须是一个数据库PK,它可能只是一个GUID。)
答案 2 :(得分:0)
购买'了解'它的付款 - 所以问它。又名'别叫我,我会叫你'
我个人创建一个类层次结构,如
Purchases
Purchase
PurchaseDAO
Payments
Payment
PaymentDAO
Purchases purchases = Purchases.find(criteria);
// user selects one of the purchases (say)
Purchase = purchase.load(purchaseId);
// calls
PurchaseDAO.load(purchaseId);
// which calls
Payments payment = Purchase.findPayments();
// calls
Payments.find(purchaseId);
// calls
PaymentDAO.find(purchaseId);
最后,您将拥有一个可以查询其付款的购买对象。 如果可能会有很多针对购买的付款,您可以在需要之前推迟付款。
这似乎是额外的工作(并且是),但它允许清晰地分离业务和持久性逻辑,我发现回报创建额外类的小额投资。