scaleupstack/easy-object

为PHP的现代、防御性和严格编程风格提供便捷的对象处理,无需样板代码。例如,默认getter、类型属性、命名/默认构造函数。

v0.3.0 2019-09-08 12:15 UTC

This package is auto-updated.

Last update: 2024-09-08 23:44:11 UTC


README

此库为PHP的现代、防御性和严格编程风格提供了便捷的对象处理。

此库大大减少了样板代码,并提供PHP(目前)不支持的功能,例如:

  • 结构体,

  • 不可变对象,

  • 类型属性,包括联合类型,

  • 默认getter,

  • 简化测试用例的设置,

  • 对象中无动态/未定义属性

此库基于 scaleupstack/metadatascaleupstack/reflection

安装

使用Composer安装此库

$ composer require scaleupstack/easy-object

简介

开发此库的主要动机是在领域驱动设计(DDD)、事件源(ES)和命令查询责任分离(CQRS)的视角下简化业务领域的建模。当然,你并不局限于这些。

目前,你可以通过以下默认功能增强你的对象:

  • 标准getter,

  • 标准构造函数和命名构造函数(即工厂方法),

  • 类型属性,包括联合类型,

  • 简化测试用例的设置。

并且实现附加功能非常简单。

要理解库的用法,有三个要点

未来考虑的功能包括

  • 防止动态/未定义属性,

  • 序列化,

  • 在不更新所有客户端的情况下处理演变的数据库结构(例如,对于领域事件的版本),

  • 验证?

  • 虚拟setter?(容易实现;但你难道不想编写表明意图的方法来转换对象的属性状态?)

  • 只读属性?(我默认getter没问题。)

查看[src/Traits/]了解其工作原理。 (我不确定是否想在将来提供这些特性。可能以示例的形式提供它们会更好。所以可能将特性复制到您的项目中是个不错的选择;或者至少创建包含这些特性的项目特定特性。)

此库基于 scaleupstack/metadata(包括[scaleupstack/annotations])和scaleupstack/reflection。通过此库和 scaleupstack/metadata 中的扩展点,您可以为您的情况添加额外的元编程。

待办:待定

当前状态

此库将在内部项目背景下进一步开发。我不期望有大型的重构或BC中断。 (一个可能的BC问题是上面提到的 src/Traits/ 的移除。)

如果您缺少任何东西,请随时联系我,或创建一个pull request。

请在评估此库时,请随时联系我。我很乐意讨论想法,或者在进行更改时更加敏感。

贡献

感谢您想为ScaleUpStack/EasyObject做出贡献。

许可证

请检查此包根目录下的 LICENSE.md

版权

ScaleUpVentures Gmbh,德国
Thomas Nunninger thomas.nunninger@scaleupventures.com
www.scaleupventures.com