定制 northwoods/entity-proxy 二次开发

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

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

northwoods/entity-proxy

Composer 安装命令:

composer require northwoods/entity-proxy

包简介

A hydrating proxy for objects with private properties

README 文档

README

Become a Supporter Latest Stable Version License Build Status Code Coverage Scrutinizer Code Quality

A reflection based proxy for hydrating objects with private properties.

Attempts to be PSR-1, PSR-2, and PSR-4 compliant.

Install

composer require northwoods/entity-proxy

Usage

Proxies are created with the singleton ProxyFactory:

use Northwoods\EntityProxy\ProxyFactory;

Proxies can be created as wrappers around existing objects:

$proxy = ProxyFactory::modify($user);

$proxy->set('email', 'user@example.com');

Or new instances when hydrating from other data sources:

$proxy = ProxyFactory::create(User::class);

$proxy->setArray([
    'id' => 1234,
    'username' => 'jane.doe',
    'email' => null,
]);

/** @var User */
$user = $proxy->reveal();

Proxies can also read existing values on the object:

$username = $proxy->get('username');

Reasoning

In Domain Driven Design it is often recommended that entities use private properties with getters to access state and setters to change state based on business requirements. Since an entity is considered to be a persistent object, its constructor should only be called once for the lifetime of the entity. This allows for domain events to be triggered by the constructor to notify the application that, for example, a new user has registered.

With this limitation in mind, the requirements for the hydrator are:

  1. It must not call the entity constructor.
  2. It must be able to set private/protected properties.
  3. It must be as efficient as possible.

The easiest way to achieve these goals is to use reflection, which allows us to create objects without constuctor, make properties accessible, and write property values. The reflection of every class should be internally cached for the lifetime of the factory to maximize performance.

If performance is of concern there are other viable approaches that are faster but more complicated to setup and use.

License

MIT

统计信息

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

GitHub 信息

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

其他信息

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

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固