让我说我在这里有一对多的关系:
每个客户都有许多信用卡。
信用卡的API端点:
GET / customers / {customer_id} / cards / {card_id}
GET / customers / {customer_id} / cards
POST / customers / {customer_id} / cards
PATCH / customers / {customer_id} / cards / {card_id}
DELETE / customers / {customer_id} / cards / {card_id}
卡相关操作的5种方法:
1.获得客户卡片
2.获取客户的所有卡片
3.为客户创建一张卡片
4.更新客户的“卡片”详细信息
5.删除客户的卡片
我的API架构分层使用 controller - >服务 - >存储库。
有:
CustomersController,CustomersService,CustomersRepository,CardsService,CardsRepository。
我的问题是,我应该将每种方法放在与卡相关的操作中,以及控制器和控制器之间的关系应该如何?服务与存储库层是什么样的?
目前我这样想:
CustomersController有一个CustomersService和一个CardsService。 CardsService有一个CustomersRepository和CardsRepository(像往常一样通过构造函数注入)。以上所有5种方法都存在于CardsService中。 CardsService中CustomersRepository的目的是从我的数据库中检索条带客户ID,这样我也可以在Stripe上执行相同的操作。
根据最佳做法,这种方法是否正确?或者我应该将5个方法放在CustomersService中,而不是完全不使用CardsService?
对此最好的解决方案是什么?
其他信息:
- 我使用PHP和Laravel框架,并使用Stripe作为支付平台
答案 0 :(得分:0)
根据发布的Rest apis,我认为没有客户就不能存在卡片。因此,其余资源应命名为 CustomersResource ,并且所有上述其他api应存在于此类中。
此课程将同时注入 CustomerService 和 CardService 实例。
您需要做的下一个更改是删除对CardService的CustomerRepository依赖关系,因为它违反了单一责任原则。
简单地说,客户服务应该处理与客户相关的操作,卡服务应该处理与卡相关的操作。不要混合这两种。
如果您需要使用其卡信息构建客户对象,请从其余资源编排对客户服务和卡服务的调用,并将其发送回用户。
希望它有所帮助。