如何处理复杂查询条件:Data Mapper vs. Service Layer
面向对象编程中处理复杂查询条件时,有主要有两种方法:在数据映射器或服务层中处理它们。
数据映射器方法
数据映射器模式用于将域对象映射到和来自数据库。在处理条件的上下文中,数据映射器可以具有接受条件列表的通用 get() 方法。例如,如果我们想按作者检索书籍,我们可以调用 BookDataMapper->get(['author' => 'John Doe']).
但是,如果我们想使用多个条件,则需要复杂的查询,例如按作者和出版商查找书籍,我们可以扩展 BookDataMapper->get() 方法来解析条件。或者,我们可以创建一个新方法,如 BookDataMapper->getByAuthorAndPublisher()。
服务层方法
服务层负责处理应用程序的业务逻辑。它可以充当控制器和数据映射器之间的中介。在处理复杂查询条件的情况下,服务层可以直接调用更具体的数据映射器方法,例如BookService->getByAuthorAndPublisher()。这种方法会将服务层简化为一个中间人。
方法比较
数据映射器方法将条件保留在数据映射器内,这可以导致条件逻辑从域对象中泄漏。另一方面,服务层方法将领域逻辑保留在服务层内,使其更加模块化。
最终,这些方法之间的选择取决于应用程序的具体要求。如果领域逻辑相对简单并且复杂查询不常见,则数据映射器方法可能就足够了。但是,如果领域逻辑复杂或者复杂查询频繁,那么服务层的方式可能更合适。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3