构建复杂查询时,会出现这样的问题:数据映射器还是服务层应该管理的条件。这个难题源于想要在简单性和可维护性之间取得平衡的愿望。
数据映射器模式提倡极简界面,使用 fetch()、save() 等方法,和remove()处理基本操作。条件封装在域对象本身内,确保了干净的数据映射器接口。
$user = new User; $user->setName('Jedediah'); $mapper = new UserMapper; $mapper->fetch($user); if ($user->getFlags() > 5) { $user->setStatus(User::STATUS_LOCKED); } $mapper->save($user);
这种方法确保数据映射器保持专注于其核心功能,同时还通过域对象促进复杂的查询条件。但是,它需要一个公共方法来从域对象中检索数据以实现获取目的。
在此方法中,服务层承担解析条件的责任。这简化了数据映射器,使其具有接受多个条件的通用 get() 方法。但是,这可能会导致域逻辑从数据映射器中泄漏,因为服务层将处理复杂的查询。
$bookService->getByAuthorAndPublisher($authorName, $publisherName);
这些方法之间的选择是主观的,反映了开发者的偏好。然而,需要考虑的一些关键因素包括:
最终,最佳方法取决于具体背景和开发团队的优先事项。
以上是数据映射器与服务层:谁应该处理复杂查询中的条件?的详细内容。更多信息请关注PHP中文网其他相关文章!