存储库模式:是不是让整个领域对象都出现不良行为(读取方法)?
Repository pattern: isn't getting the entire domain object bad behavior (read method)?
存储库模式可以抽象出实际的数据源,我确实看到了很多好处,但是存储库不应该使用 IQueryable 来防止泄漏数据库信息,它应该总是 return 域对象,而不是 DTO 或 POCO,这是我难以理解的最后一件事。
如果存储库模式总是必须 return 域对象,这是否意味着它在大多数时候获取的数据太多了?假设它 return 是一个具有四十个属性的员工域对象,在使用该对象的服务和视图层中,实际只使用了其中的五个属性。
这意味着数据库已经获取了大量不必要的数据并通过网络传输。对一个对象这样做几乎不会引起注意,但是如果将数百万条记录以这种方式推送并且每次都会丢弃大量数据,这不是不良行为吗?
是的,当添加或编辑或删除对象时,您将使用整个对象,但是读取整个对象并将其推送到另一层只使用它的一小部分是没有利用下划线数据库和网络最优化的方式。我在这里错过了什么?
没有什么可以阻止您拥有单独的读取模型(可以是域的单独存储投影或 query-time 投影)并分离命令和查询问题 - CQRS。
如果您随后将 GraphQL 之类的东西放在读取端之前,那么消费者可以准确地决定他们想要从完整模型到个人 field/property 级别的数据。
您的命令仍然像以前一样与完整域模型交互(除非性能 no-brainer 使用基于集合的操作)。
存储库模式可以抽象出实际的数据源,我确实看到了很多好处,但是存储库不应该使用 IQueryable 来防止泄漏数据库信息,它应该总是 return 域对象,而不是 DTO 或 POCO,这是我难以理解的最后一件事。
如果存储库模式总是必须 return 域对象,这是否意味着它在大多数时候获取的数据太多了?假设它 return 是一个具有四十个属性的员工域对象,在使用该对象的服务和视图层中,实际只使用了其中的五个属性。
这意味着数据库已经获取了大量不必要的数据并通过网络传输。对一个对象这样做几乎不会引起注意,但是如果将数百万条记录以这种方式推送并且每次都会丢弃大量数据,这不是不良行为吗?
是的,当添加或编辑或删除对象时,您将使用整个对象,但是读取整个对象并将其推送到另一层只使用它的一小部分是没有利用下划线数据库和网络最优化的方式。我在这里错过了什么?
没有什么可以阻止您拥有单独的读取模型(可以是域的单独存储投影或 query-time 投影)并分离命令和查询问题 - CQRS。
如果您随后将 GraphQL 之类的东西放在读取端之前,那么消费者可以准确地决定他们想要从完整模型到个人 field/property 级别的数据。
您的命令仍然像以前一样与完整域模型交互(除非性能 no-brainer 使用基于集合的操作)。