定制 stratadox/entity-state 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

stratadox/entity-state

Composer 安装命令:

composer require stratadox/entity-state

包简介

README 文档

README

Build Status Coverage Status Scrutinizer Code Quality Infection Minimum PhpStan Level Maintainability Latest Stable Version License

Installation

Install with composer require stratadox/entity-state

What is this?

This package models the entity state at a certain point in the execution of the business logic.

The model is built in such a way that it can find differences in terms of added, altered or removed entities, when comparing itself to another point in the process.

Additionally, the package comes with a service to extract the state of the entities.

How to use this?

Step 1: Extract the state of the entities from the Identity Map.

$originalState = Extract::state()->from($identityMap);

Step 2: Make some changes in the domain.

$identityMap = $identityMap->add('id-26', new Something('foo'));

$identityMap->get(User::class, '1')->changeNameTo('Chuck Norris');

$identityMap = $identityMap->remove(Foo::class, '3');

(Note: In real life you'd access the identity map through repositories instead)

Step 3: Extract the new state from the entities in the identity map.

$newState = Extract::state()->from($identityMap);

Step 4: Get the changes since the original state was captured.

$changes = $newState->changesSince($originalState);

Step 5: Profit.

assert($changes->added()[0]->class() === Something::class);
assert($changes->added()[0]->id() === 'id-26');

assert($changes->altered()[0]->class() === User::class);
assert($changes->altered()[0]->id() === '1');

assert($changes->removed()[0]->class() === Foo::class);
assert($changes->removed()[0]->id() === '3');

assert($changes->altered()[0]->properties()[0]->name() === 'userName');
assert($changes->altered()[0]->properties()[0]->value() === 'Chuck Norris');

Name formatting

Notice that in the above example, the user's name is stored as a string value in the property userName. If instead the User class would have a Name value object, the assertion would look more like this:

assert($changes->altered()[0]->properties()[0]->name() === 'Name:userName.name');

If this Name object were contained in an array, the result would look like this:

assert($changes->altered()[0]->properties()[0]->name() === 'Name:array:userName[0].name');

Value formatting

It may in some cases be preferable to store the string representation of an instance, rather than all its properties. To extract a string representation of the objects of a class, one can use:

$entityState = Extract::stringifying(UuidInterface::class)->from($identityMap);

To do

Potential to-do's:

  • Increase performance by hashing properties names?
  • Split names into parts?
  • Add methods for querying properties?
  • Make properties exportable for hydration

统计信息

  • 总下载量: 6
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-05-28

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固