php业务逻辑,php – 将业务逻辑放在实体中

我已经阅读了福勒关于“贫血领域模型”的文章(链接:

http://www.martinfowler.com/bliki/AnemicDomainModel.html),我同意他的观点.

我试图创建一个实体是简单POPO的应用程序,但是这样,我有一个胖服务层,而将一些逻辑放到实体中将是最简单的解决方案.

所以我会有这样的架构:

^

| Twig

| Controller | API

| Service

| Model

| Entity

哪里:

实体:将是简单的POPO,只是一袋二传手和吸气剂

模型:将是用业务逻辑装饰的实体对象

服务:包含涉及多个实体的所有业务逻辑(这里我也将放置验证任务),并且像转换器实体一样 – >模型

控制器| API:只匹配Request with Service,ParamConvert并检查autorization

Twig:表示层

我的问题是如何将实体层隐藏到控制器并且仅适用于模型.

为了用业务逻辑来装饰我的实体,我想构建一个使用存储库并装饰结果的服务(我找不到另一种方法来实现它).

所以,一个愚蠢的例子:

namespace ...\Entity\Article;

class Article {

private $id;

private $description;

// getter and setter

}

namespace ...\Model\Article;

class Article {

private $article; // all methods will be exposed in some way

private $storeService; // all required services will be injected

public function __construct($article, $storeService) {

$this->article = $article;

$this->storeService = $storeService;

}

public function getEntity() {

return $this->article;

}

public function isAvailable() {

return $storeService->checkAvailability($this->article);

}

...

}

class ArticleService {

private $storeService; // DI

private $em; // DI

private $repository; // Repository of entity class Article

public function findById($id) {

$article = $this->repository->findById($id);

return new \Model\Article($article, $storeService);

}

public function save(\Model\Article $article) {

$this->em->persist($article->getEntity());

}

...

}

上层是以通常的方式制作的.

我知道这不是一个好的解决方案,但我找不到更好的方法来建立模型层.我真的不喜欢这样的东西:

$articleService->isAvailable($article);

而不是更多的OO:

$article->isAvailable();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值