面向对象里类方法归属问题处理

网上一篇文章《十年之后再看“面向对象”》

http://www.cnblogs.com/freeflying/p/7410167.html

里面有讲到:

 

我举一个例子:

现在有两个类,一个用户类(User),一个博客类(Blog),现在有一个发布博客的方法(Publish)。

那么,“发布博客”这个方法,究竟是应该放在用户的类里面,还是博客的类里面?即:究竟是User.Publish(Blog)呢,还是Blog.Publish()?

 

 

 

原文作者未说例子给出一个较好的处理方案,并由此例子对面向对象进行了负面的评论。个人认为这块是有待商榷的。

首先我们不能把面向对象简单化了。OO不是简单的把现实的事件来做一个动谓分解。用户发布博客,不能简单的就是一个用户类,然后一个发布的方法。如果这样简单粗暴的话,那OO也就太容易了。

这块个人认为应结合领域驱动来分析问题。这种不知道放在哪个领域对象上的行为,一般都是比较复杂的业务,可能会涉及多个Entity及外部资源调用,所以用户发布博客可以提取成Domain层的一个服务,如BlogPulishService(此服务应归属于Blog 聚合类所在的BC)。它应该调用下层相应的领域模型来实现,相关业务包括如博客内容的审核,博客的状态更新,粉丝消息通知等。这个发布博客事件可以用一个pipline来实现。

通过对发布博客这个事件的进一步业务分析,设计出更合理的领域模型才应该是OO所关注的重点。

另:“发布博客”业务可以产生一个“blogPublished”事件。其它业务可以订阅这个事件。设计上方便解耦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值