DDD 的存储库模式中的客户端
Client in Repository Pattern of DDD
我一直在快速阅读《领域驱动设计》一书。
现在我已经达到了存储库模式。
我不确定他们提到 "Client" 指的是什么?
这里的 "Client" 是什么意思?
Databases are part of the infrastructure. A poor solution is for
the client to be aware of the details needed to access a database.
For example, the client has to create SQL queries to retrieve the
desired data. The database query may return a set of records,
exposing even more of its internal details. When many clients
have to create objects directly from the database, it turns out that such code is scattered throughout the entire domain.
存储库的客户端是一段代码(另一个class),通常是DDD/Onion架构上下文中的应用层。经验法则是:每个聚合根 1 个存储库。如果您的聚合根是 Order,其中包含 OrderItem 的集合,则您仅创建 OrderRepository 并 return 使用所有 OrderItems 支持整个订单,而不是延迟加载。现在,您的客户端(应用层代码)应该不知道存储库中有什么(它是基于文件的,基于 sql 的,还是基于 http 的)您将其视为内存集合:repository.GetById(orderId)其中存储库是 IOrderRepository。这意味着您可以随时轻松地将存储库从内存更改为 sql 并返回,并且您的客户端代码(应用程序层)或任何使用存储库的 class 都不会受到影响,因此保留了 Liskov 替换原则。
我一直在快速阅读《领域驱动设计》一书。
现在我已经达到了存储库模式。
我不确定他们提到 "Client" 指的是什么?
这里的 "Client" 是什么意思?
Databases are part of the infrastructure. A poor solution is for the client to be aware of the details needed to access a database. For example, the client has to create SQL queries to retrieve the desired data. The database query may return a set of records, exposing even more of its internal details. When many clients have to create objects directly from the database, it turns out that such code is scattered throughout the entire domain.
存储库的客户端是一段代码(另一个class),通常是DDD/Onion架构上下文中的应用层。经验法则是:每个聚合根 1 个存储库。如果您的聚合根是 Order,其中包含 OrderItem 的集合,则您仅创建 OrderRepository 并 return 使用所有 OrderItems 支持整个订单,而不是延迟加载。现在,您的客户端(应用层代码)应该不知道存储库中有什么(它是基于文件的,基于 sql 的,还是基于 http 的)您将其视为内存集合:repository.GetById(orderId)其中存储库是 IOrderRepository。这意味着您可以随时轻松地将存储库从内存更改为 sql 并返回,并且您的客户端代码(应用程序层)或任何使用存储库的 class 都不会受到影响,因此保留了 Liskov 替换原则。