gpt4 book ai didi

java - 服务层中的服务组织?

转载 作者:行者123 更新时间:2023-12-02 08:08:57 26 4
gpt4 key购买 nike

我有一个包含大量不同实体的 Java 服务器应用程序。到目前为止,每个实体顶级实体都有自己的CRUD 服务。我所说的顶层是指可以独立存在的实体树的根。

现在我正在进入 Flex 客户端的核心,发现我需要/编写许多不同的查询。但最好把这些查询放在哪里呢?

举例来说,我有一个查询,根据与某个“bar”的关联来查找所有“foos”。目前该查询位于“foo”服务(findAllByBar)上,但我发现将其(也?)放在“bar”服务(findFoos)中会非常方便。另一方面,我还可以创建一个查询服务并将所有查询集中在其中。

这里有什么好的做法吗?

最佳答案

尝试从以下角度对您的应用程序进行分层:

  • 域:将您的类设计为“客户”等实体、“地址”或“颜色”等值对象以及聚合根(例如包含“LineItem”列表的“订单”)

  • 存储库:这些是实体的数据访问,为每个聚合根创建一个存储库(CustomerRepository、OrderRepository...)

  • 服务:创建由逻辑业务抽象或有界上下文而不是实体组成的粗粒度服务,当所有这些实体都存在时,为订单创建服务、为商品创建服务以及为客户创建服务是不合逻辑的。代表订单处理的一个原子业务值(value),那么您的服务将使用所有必需的存储库来处理数据访问。

示例:

public class OrderRepository {
public Foo getById(int id) {
//
}

public Foo getByCustomer(Customer customer) {
//
}
}

public class CustomerRepository {
public Foo getById(int id) {
//
}

public Foo getByUserName(string userName) {
//
}
}

public class TradingService {
private OrderRepository _orderRepository;
private CustomerRepository _customerRepository;

public TradingService(OrderRepositoryInterface orderRep, CustomerRepositoryInterface cusRep) {
_orderRepository = orderRep;
_customerRepository = custRep;
}

public void placeOrder(string customerUserName, Order order) {
Customer customer = _customerRepository.getByUserName(customerUserName);
order.setCustomer(customer);
_orderRepository.add(order);
// ....
}
}

关于java - 服务层中的服务组织?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7727528/

26 4 0
文章推荐: Citrix 环境中 Java 进程将 CPU 占用率为 100%
文章推荐: java - 如何从 ArrayList 中分离数据