首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我所有真正的方法都在服务层吗?

我所有真正的方法都在服务层吗?
EN

Stack Overflow用户
提问于 2013-02-17 21:16:55
回答 1查看 303关注 0票数 1

从我读过的所有教程来看,服务层似乎只有一两个方法,所以我不确定服务是否只应该是轻量级的/瘦的,而不是胖的,你需要多少方法就有多少

如果我有一个Post域对象和一个PostService类,如果你想删除帖子,你需要从控制器中这样做:

代码语言:javascript
运行
复制
$postService = $this->serviceFactory->build('post');
$postService->deletePost($id);

PostService中的deletePost()方法类似于:

代码语言:javascript
运行
复制
$postMapper = $this->dataMapperFactory->build('post');
$post = $postMapper->fetchById($id);
// Check if the post exists
// Check if it belongs to this user
// Some other checks
$postMapper->delete($post);

对吗?从本质上说,域对象只是值对象,所有的工作都在服务层完成吗?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-17 21:37:01

看起来,问题的一部分实际上出在映射器中。IMHO,映射器不应该负责创建域对象。因此,您的示例代码实际上应该看起来更像:

代码语言:javascript
运行
复制
$mapper = $this->dataMapperFactory->build('post');
$post = $this->domainObjectFactory->build('post');

$post->setId( $id );
$mapper->fetch($post);
// Check if the post exists
// Check if it belongs to this user
// Some other checks
$postMapper->delete($post);

而且,大多数这些“其他检查”实际上是在域对象上完成的。例如:

代码语言:javascript
运行
复制
if ( $post->belongsTo($user) )
{
    ...
}

服务的角色是“应用程序逻辑”,这是一个用来描述域对象和映射器之间交互的术语。服务与其他服务交互也很常见。

作为附注

拥有一个PostService对我来说没有任何意义。服务应该表示模型层中的领域业务逻辑的主要部分。

  • 您使用的是Recognition服务,而不是UserServiceLoginService.
  • you;您使用的是Content服务,而不是DocumentServiceCommentServiceCommentService

哦..。而且,您不再需要添加..Service..Controller后缀。PHP现在有了名称空间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14921492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档