栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

谁应该处理复杂查询,数据映射器或服务层中的条件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谁应该处理复杂查询,数据映射器或服务层中的条件?

数据映射器 模式只告诉你,什么是应该做的,它不应该如何实现。
因此,本主题中的所有答案都应视为主观答案,因为它们反映了每个作者的个人喜好。

通常 尝试使mapper的界面尽可能简单:

  • 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 );

这样,您可以具有多种检索条件,同时保持界面清洁。

不利的一面是,您需要一个公共方法来从域对象中检索信息以拥有这种

fetch()
方法,但是无论如何您都将需要它来执行
save()

没有真正的方法来实现映射器和域对象交互的 “告诉不要问” 的经验法则。

至于 “如何确保您确实需要保存域对象?”
,您可能会想到,此处已进行了介绍,其中包含大量的代码示例和注释中的一些有用内容。

更新资料

如果您希望处理一组对象,那么应该处理不同的结构,而不是简单的 Domain Objects

$category = new Category;$category->setTitle( 'privacy' );$list = new ArticleCollection;$list->setCondition( $category );$list->setDateRange( mktime( 0, 0, 0, 12, 9, 2001) );// it would make sense, if unset second value for range of dates // would default to NOW() in mapper$mapper = new ArticleCollectionMapper;$mapper->fetch( $list );foreach ( $list as $article ){    $article->setFlag( Article::STATUS_REMOVED );}$mapper->store( $list );

在这种情况下,集合是光荣的数组,具有接受不同参数的能力,然后将这些参数用作映射器的条件。当映射器尝试存储集合时,它还应允许映射器从该集合中获取已 更改的
域对象的列表。

在这种情况下,映射器应该能够构建(或使用预设的)条件下的所有 可能
条件的查询(作为开发人员,您将了解所有这些条件,因此您无需使其在无限条件下工作)为该集合包含的所有未保存域对象更新或创建新条目。

注意: 在某些方面,您可以说映射器与构建器/工厂模式有关。目标是不同的,但是解决问题的方法非常相似。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/597080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号