通过数据映射器处理集合模式中的项目

2023-12-08

我的问题与更新部分有关@特雷斯科的回答于“谁应该处理复杂查询中的条件,数据映射器还是服务层?" 下面是代码供参考和方便。

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

在这段代码中ArticleCollection是领域对象的集合,我们称它们为Article是。此刻ArticleCollectionMapper从数据库中获取数据,并将其分配给$list,实例Article需要制作(对于每一行)。会的实例Article添加到我们的集合实例中($list)通过类似的方法$list->addArticle($newArticle),工厂对象应该像ArticleFactory用于此目的,还是还有其他我没有考虑过的选择?


我不认为实际使用工厂对象来添加文章。您可能会看到自己使用一个来创建以下实例Article(在第二个例子中),不过。我继续做的是添加一个addArticles ()方法到ArticleCollection实例。这样你就可以简单地调用你的实例上的方法ArticleCollection来自映射器。ArticleCollectionMapper可能看起来像:

class ArticleCollectionMapper extends DataMapperAbstract
{
    public function fetch ( ArticleCollection $articles )
    {
        $prepare = $this->connection->prepare( "SELECT ..." );
        $prepare->execute();
        // filter conditions

        $articles->addArticles( $prepare->fetchAll() );
    }
}

您需要通过从以下位置获取条件来进行一些过滤ArticleCollection实例,该实例被排除在上面的代码片段之外。然后我们的域对象addArticles()实现看起来类似如下:

class ArticleCollection extends DomainObjectAbstract
{
    protected $collection = array();

    public function addArticles ( Array $articles )
    {
        foreach ( $articles as $article )
        {
            $articleCollectionItem = new Article;
            $articleCollectionItem->setParams( $article );
            // however you prefer filling your list with `Article` instances

            $this->collection[] = $articleCollectionItem;
        }
    }
}

您可能还想添加addArticle()方法取决于您的需要,然后只需替换其中的内容foreach上面调用了addArticle()。请注意,上面的示例非常简化并且代码will需要进行调整才能满足您的标准。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过数据映射器处理集合模式中的项目 的相关文章

随机推荐

  • 具有滑动功能的 3 级可扩展列表视图

    我正在创建 3 级可扩展列表 并在第三级具有滑动功能 当使用缓存时 我在第三级 swipelistview 中遇到滑动功能的问题 对于滑动 我使用 47deg android swipelistview https github com 4
  • 从 XML feed 更新 MySQL 记录的最佳方法

    我正在考虑最好的方法 如何从 XML feed 更新表 MySQL 中的记录 我有数据库 该数据库包含来自多个销售门户的每日报价 所以现在 大约午夜我正在从表中删除所有记录 因为我认为从表中删除所有内容比将当前数据与插入的数据进行比较更好
  • Google Cloud ML FAILED_PRECONDITION

    我正在尝试使用 Google Cloud ML 托管 Tensorflow 模型并获取预测 我有一个预训练模型 已上传到云端 并在 Cloud ML 控制台中创建了模型和版本 我按照说明进行操作从这里准备我的数据以请求在线预测 对于 Pyt
  • 如果函数执行时间太长,iPhone 会超时吗?

    我有一个函数 可以使用 cocoa 的 Url 对象从网络获取外部资源 它在模拟器上工作正常 但偶尔在设备本身上失败 这是一个谷歌查询 所以资源显然确实存在 这让我相信硬件上存在一些内部超时障碍 但没有读到这样的障碍是否存在 还有其他人遇到
  • 动态显示和隐藏 JFrame 装饰

    我正在开发一个基于 Java Swing 的应用程序 具有不同的视角 对于 主菜单 透视图 我不希望装饰窗口 JFrame 而在其他透视图中 我确实希望装饰窗口 换句话说 我需要动态更改装饰属性 我尝试过使用setUndecorated f
  • 如何将行的值换行到R中特定字符处的新行

    我有一个包含值的示例数据框 data lt structure list A c Date Values B c 2023 04 03 Heat Capacity nSpecific Heat Capacity nHeat Index ro
  • JSON、CURL 和 Google 的地理定位

    我正在尝试使用谷歌的地理定位 浏览器定位 服务 到目前为止 我认为当我尝试类似的事情时 https maps googleapis com maps api browserlocation json browser firefox sens
  • 如何在 Microsoft Azure 网站上更改 jvm 参数

    我在Azure上创建了一个基于java的网站 并在使用 自定义创建 时选择tomcat作为容器 然后准备好了一个空网站 我可以使用ftp上传WAR文件 但无法触及tomcat文件 我需要更改 JVM 的堆大小 该怎么做 请参见http az
  • 致命错误:调用未定义的函数 mcrypt_get_block_size()

    我正在将我的网站上传到服务器 并且上传成功 之后 当我运行时 它给了我这个错误 致命错误 调用未定义的函数 mcrypt get block size 我也检查我的PHP我的服务器上的版本是5 3 14 我不知道该如何处理这个问题 我使用这
  • 如何通过Javascript与Flash交互?

    目前有一个非常基本的 Flash 项目 它连接到 rtmp 服务器并从网络摄像头传输视频和音频 它从具有特定名称的用户创建流 此外 在同一项目中 还有其他实体可以流式传输的流名称的输入 因此 您可以通过 Flash 进行类似于 Skype
  • 在客户端上找不到 socket.io.js

    这个问题之前已经被问过 但在之前的回复中没有找到任何解决方案 Socket IO 给我带来了两个问题 服务器端给出了此错误 错误 监听 EACCES 我阅读了堆栈溢出并通过发出 sudo 命令来启动服务器来解决此问题 现在客户端似乎没有按照
  • Winform标签控件文本变化的地方

    我有一个 labelControl Text My name 结果是 My name 符号改变位置 如果我写 My name 结果是 My name 我如何阻止它改变位置 您需要设置RightToLeft属性正确 默认情况下这应该是Righ
  • Python 中的 Hot Deck 插补

    我一直在尝试找到允许我替换数据框列中缺失值的 Python 代码 我的分析重点是生物统计学 因此我不习惯使用平均值 中位数 众数来替换值 我想申请 热甲板插补 方法 我无法在网上找到任何采用数据帧列并使用 Hot Deck Imputati
  • 将应用程序更新到 iPhone 的 appStore 时出现图标错误?

    我正在尝试使用应用程序加载器更新我的应用程序 当我提交存档文件时 我收到此错误 icon specified in the info plist not found under the top level app wrapper icon5
  • Mongodb 服务器启动警告

    我见过其他人有启动警告 但我似乎在这个上找不到任何内容 一些注意事项我在 Ubuntu 14 04 上运行 我的 mongo 版本是 3 0 5 我也尝试过 3 0 6 但有类似问题 我尝试停止 重新启动但无济于事 它似乎正在寻找一个不存在
  • 动态语言 IDE 中的自动补全,特别是 PyDev 中的 Python

    我是 Python 新手 具有静态类型语言 包括大量 Java 背景 在检查了功能 受欢迎程度等之后 我决定在 Eclipse 中使用 PyDev 作为 IDE 我很惊讶自动完成功能似乎无法正常工作于内置程序 例如 如果我在以下之后尝试对数
  • 在 C# 中转换日期时间格式

    如何从网络服务转换此日期时间格式 日期时间值为 timestamp 2014 04 18T14 45 00 02 00 我不想将其转换为 dd mm YYYY hh mm ss 你需要使用 yyyy MM dd T HH mm ssK 格式
  • SELECT、foreach 选项中的 knockoutjs 无容器模板不适用于 Internet Explorer

    我有一个测验 调查应用程序 但在使用 knockoutjs 填充下拉列表时遇到问题 请用 Firefox 或 Chrome 检查这个小提琴 然后用 Internet Explorer 9 或 IE8 或 IE7 knockout 说与 IE
  • 在 VB.Net 中使用 Enter 键的 Tab 键功能

    I have a form with nearly 20 Textbox and 5 Combobox and one control in dependent on the other Now I want to write the co
  • 通过数据映射器处理集合模式中的项目

    我的问题与更新部分有关 特雷斯科的回答于 谁应该处理复杂查询中的条件 数据映射器还是服务层 下面是代码供参考和方便 category new Category category gt setTitle privacy list new Ar