atrauzzi/domain-tool

该包已被放弃且不再维护。未建议替代包。
该包最新版本(dev-master)没有提供许可证信息。

为您的领域库提供惯例和许多常用实用方法!

dev-master 2016-01-14 13:00 UTC

This package is not auto-updated.

Last update: 2016-09-28 18:16:57 UTC


README

前提

在编写领域代码时,几乎可以肯定你会为许多类手动编写许多类似的操作。其中可能包括:

  • 通过数组赋值和访问多个属性
  • 从模型复制状态到视图模型
  • 编写或生成并维护“空”的getter和setter方法
  • 获取模型上的属性列表,有时是全部,有时基于白名单
  • 将对象转换为数组,有时基于白名单
  • 将一个类的实例向上或向下继承链转换为另一个类

如果这些操作让你觉得无聊,那么你完全正确。它们通常很无聊,但它们也是当你使用基础模型类和ORM时利用的一些最常见功能。

在最简单的情况下,这个库可能看起来有些过度。许多基础模型类实现了 __call__get__set 以在运行时公开属性。然而,通常你会编写额外的代码来操作PHP模型类定义的各种方式以及它们包含和公开其状态的方式。

在深入之前,无论是否使用Domain Tool,你都可以在项目中继续利用这些机制!

然而,除了简单的数据访问之外,这个库旨在提供每个基础模型或ORM库中都没有的功能和兼容性。Domain Tool是一个光谱 - 你可以用它来实现一个实用程序,或者完全采用它。

使用多少或多少都可以! :)

“我已经有一个ORM为我做这些事情了”

这个库中的许多功能都是受到ORM的启发。特别是ActiveRecord风格的库,它将仓库和领域模型的概念结合到一个类中。然而,有些观点认为,ActiveRecord设计模式会失去一些灵活性,代码可能会因为重复或复杂而风险。

这个库旨在促进的最简单总结是 分离。如果你没有采用分层方法进行领域开发,那么你可能不需要这个库。

话虽如此,这个库的灵活性将体现在它能够被添加到任何使用ORM来促进分层设计的解决方案中。有了正确的适配器和正确编写的层,你将能够针对模型,无论它们是否知道这个库。

“序列化?没有其他选择吗?”

是的!然而,根据我的REST API开发者经验,我发现序列化是一个棘手的问题,难以方便地解决。许多序列化库试图简化这项工作,并且做得相当接近。话虽如此,我发现Domain Tool支持两种不同的序列化方法。

序列化配置文件

使用第一种方法,您只需在某个地方定义模型的白名单规则。这可以通过Domain Tool的配置文件使用inout列表来完成。如果您愿意,还可以将属性映射到不同的传入和传出名称。

视图模型

在其他场景中,您可能希望编写一个视图模型。在这种情况下,您只需要设置一个类的适配器。在需要序列化的时候,适配器可以推断出的所有属性将被序列化。Domain Tool还提供了填充和转储的方法来从原始数据填充视图模型。视图模型现在变得简单多了!

使用方法

您可以使用两种方式使用这个库。

静态实用方法

这个库的所有功能都是由静态实用方法驱动的,这些方法执行单个操作,不保留任何状态。只需调用所需的方法 - 它将执行标签上所说的操作!直到库达到第一个版本,请查看在Atrauzzi\DomainTool\Service中定义的公共静态方法。

接口 + 特性

如果您不介意在域模型上依赖这个库,将提供接口和特性。这种技术最终会调用回静态实用方法,但使得对习惯于更传统ActiveRecord风格语法的用户来说使用起来更加熟悉。

术语表

事实上,一个库通常会使用多个模糊的术语来定义它旨在解决的问题域。为了解决这个问题,我维护了一个列表,其中包含您在使用Domain Tool时可能会遇到的全部术语。如果有些东西看起来不是很清楚,请在这里找到它。如果它缺失或我使用不正确,请开一个票并让我知道!

属性

在这个库(以及通过它,您的库)中,属性存在于您的模型上,并且通常是这样定义的

    /** @var int */
    protected $id;

    /** @var string */
    protected $firstName;

    /** @var boolean */
    protected $enabled;

一个完全定义的属性是类属性及其任何现有getter和setter的组合。模型适配器可能根据底层模型如何选择公开元数据来扩展这个定义。

属性数组

属性数组定义了模型值的全部状态的按值子集。

    [
        'id' => null,
        'first_name' => 'Bucky',
        'enabled' => true
    ]

这可能看起来像是过度复杂化了实际上只是PHP中的"数组"的东西,但这个定义在实践中很有帮助。您通常会看到名称$attributes,它意图是这样的结构之一。

模型适配器

一个知道如何获取特定类型模型类的数据和元数据的类。

配置文件

配置文件存储了Domain Tool各种实用方法的配置选项集。

  • 哪些变量可以被分配
  • 哪些变量可以被读取

一个熟悉的使用场景是在[反]序列化期间。通常您只想处理模型中找到的属性或方法的子集。

配置文件加载器

一个知道如何在特定环境中检索配置文件配置的类。如果没有配置,域名工具将假设一些常见的属性访问和容许的输入输出行为约定。

元信息

即将推出的库

域名工具将协助几个库,以帮助编写良好分层代码。

请耐心等待!当它们被创建时,我会在这里将它们链接起来。

许可证

域名工具免费供任何人使用和修改。我对此库使用后发生的事情不承担任何责任,也不对其生产就绪性或可用性做出任何保证。