liip/dataaggregator

此包已被废弃且不再维护。未建议替代包。

数据聚合器累积由加载器提供的信息,并将它们路由到持久层

v2.1 2014-07-11 12:59 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:25:38 UTC


README

此包不再维护。如果需要,请随意分支。

Liip DataAggregator

当前Travis状态

Build Status

目的

数据聚合器提供了一种结构化方式来获取/检索来自不同来源的信息,处理这些信息,并将其持久化到多个目的地。为了实现这一点,它基于三种组件类型

  • 加载器
  • 聚合器
  • 持久化器

此外,此库的目标是尽可能小,提供最简单的方式来进行扩展和修改以满足个人需求。

管理组件 - 聚合器

聚合器是库的核心。由于它本身对加载器和持久器之间共享的信息结构没有任何了解,它负责这两者之间的连接并管理它们的交互。作为一个简单的注册表,加载器和持久化器都附加到它上并依次运行。由于它不应该了解传输格式,因此它不应该处理或更改它传递的信息。

信息检索组件 - 加载器

名称已经揭示了此组件的目的。它了解如何从请求或响应中提取信息。数据的来源和格式由加载器特定。仍然遵循尽可能保持轻量级的理念,加载器的接口只需要两种方法。一种(load())实际上从响应中提取数据,第二种(stopPropagation())通知聚合器可能需要停止调用其他已注册的加载器。这可能是当加载器被配置为过滤器机制,返回的结果已经是空的。

信息存储 - 持久化器

持久化器的目的是使从聚合器检索到的信息永久可用。这也意味着加载器和持久化器必须对它们之间传递的信息有相同的理解。此外,持久化器还可以处理要存储的数据。

特殊风味

混合

想象一个实现,它对加载器而言充当聚合器,对聚合器而言充当加载器。这使得将一组特定的源封装到一个加载器中成为可能,并在您的实现的第一级将收集的以及可能已经处理的信息提供给聚合器。这使得重用加载器和持久化程序更加容易,并应鼓励您遵循所有优秀的面向对象原则(SOLID,DRY等)。

转换器

如草图所示,转换器是一种更通用的方法,用于从加载数据创建一个特殊的传输格式(例如,Doctrine实体)。这使得被调用的持久化程序更容易完成其工作。此外,可以在指定的传输格式中引入专门的数据验证。

概念草图

detail concept of the DataAggregator library

安装

现在源是PSR-0兼容的。没有特定的安装程序需要遵循。只需将源克隆或检出到您的项目中,并使用它。如果您不使用PSR-0兼容的自动加载器,您只需要将bootstrap.php添加到您的引导或自动加载器中。

###Composer 将以下行添加到您的composer.json文件中,并更新您项目的composer安装。

{
    "require": {
       "liip/dataaggregator": "dev-master"
    }
}

此composer配置将检出项目的'cutting edge'版本('dev-master')。请注意,这有时可能会出错。

注意:如果您不知道这意味着什么,composer项目网站是一个很好的起点。

Github

因此,我建议使用composer方式将DataAggregator作为依赖项添加到您的项目中。源也通过github提供。只需像您所熟悉的那样克隆即可。

$ git clone git://github.com/liip/DataAggregator.git

日志记录

由于不同的原因,此项目倾向于使用Monolog作为首选的记录器。不幸的是,Monolog没有实现Psr\Log\LoggerInterface。因此,实现了一个适配器,将两个世界连接起来。因此,如果您想使用Monolog记录器,请使用MonologAdaptor作为依赖项,而不是直接使用Monolog。

更新2013-01-12:@gnutix将Monolog刚刚添加对Psr-3的支持。这实际上是一个好消息,不久将有可能摆脱之前引入的MonoLogAdaptor。为参与此成就的每个人鼓掌。

验证

DataAggregator提供了将验证引入加载器、持久化程序和/或实体(即表示您传输数据的类的一个实例)的基础。

纯验证器

验证器的核心思想是验证变量的值是否满足约束。因此,该接口定义了“validate”方法,通常在约束未满足时抛出异常。如果需要处理除异常外的其他决策,则“isValid”方法应返回一个布尔值,表示验证是否通过(true)或未通过(false)。

验证器策略

策略是一组验证器。每个验证器绑定到一个特定的类型或类名,验证将在其上执行。

依赖项

  • Assert(《http://github.com/beberlei/assert》

建议

  • Monolog(《https://github.com/Seldaek/monolog》