scaleupstack / easy-object
为PHP的现代、防御性和严格编程风格提供便捷的对象处理,无需样板代码。例如,默认getter、类型属性、命名/默认构造函数。
Requires
- php: >=7.2.0
- scaleupstack/assert: ^1.
- scaleupstack/metadata: ^1.
- scaleupstack/reflection: ^1.
Requires (Dev)
- phpunit/phpunit: ^7.
This package is auto-updated.
Last update: 2024-09-08 23:44:11 UTC
README
此库为PHP的现代、防御性和严格编程风格提供了便捷的对象处理。
此库大大减少了样板代码,并提供PHP(目前)不支持的功能,例如:
-
结构体,
-
不可变对象,
-
类型属性,包括联合类型,
-
默认getter,
-
简化测试用例的设置,
-
对象中无动态/未定义属性
此库基于 scaleupstack/metadata 和 scaleupstack/reflection。
安装
使用Composer安装此库
$ composer require scaleupstack/easy-object
简介
开发此库的主要动机是在领域驱动设计(DDD)、事件源(ES)和命令查询责任分离(CQRS)的视角下简化业务领域的建模。当然,你并不局限于这些。
目前,你可以通过以下默认功能增强你的对象:
-
标准getter,
-
标准构造函数和命名构造函数(即工厂方法),
-
类型属性,包括联合类型,
-
简化测试用例的设置。
并且实现附加功能非常简单。
要理解库的用法,有三个要点
-
库提供了魔法行为,例如,查看src/Magic/VirtualGetter.php 或 src/Magic/NamedConstructor.php。
-
接下来,你需要一个特质,其中包含相关功能,例如src/Traits/FixtureBuilderTrait.php。要了解如何包含静态和非静态方法,请查看tests/Resources/Magic/ClassForNamedConstructorTesting.php。(即使魔法没有作为特质包含在这里,也不是大问题。)
-
最后,你需要注释你的实体并使用正确的特质,例如在tests/Resources/Traits/EntityForTesting.php、tests/Resources/Traits/FixtureBuilderForTesting.php 或 tests/Resources/Magic/ClassForDispatcherTesting.php 中完成。
未来考虑的功能包括
-
防止动态/未定义属性,
-
序列化,
-
在不更新所有客户端的情况下处理演变的数据库结构(例如,对于领域事件的版本),
-
验证?
-
虚拟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