软件责任实体

    软件是一个生态系统。其中有各种组成元素,这些组成元素相互作用,形成整个软件生态环境,支撑着整个软件生态系统的正常运行。如此,关于如何构建一个软件,我觉得可以类比到生态系统的构建。
    一个系统的运作,必然需要多种责任实体。什么是责任实体?它的表现形式是什么?顾名思义,责任实体就是承担一定责任的一种实体。一个系统中,具体会有哪些实体?如何挖掘这些实体?我认为可以从角色的构造型出发来寻找实体,常见的角色构造型有信息持有者、实体构建者、服务提供者、控制者和中间人,等等。实体的表现形式是什么?这个有多种表现,看你需要的粒度,大粒度可以是子系统,小粒度可以到函数。通常由粒度从大到小,可以识别出四种表现形式:子系统,包,对象,函数(注意这里没有“类”的概念,说实话在PHP里我不大使用“类”这个词,具体原因下一篇讲述)。实体有接口,通过接口对外提供服务,接口的调用者不需要知道实体内部怎么实现该服务,通常所谓的“面向接口编程”、“测试驱动开发”都是这种本质属性的表现:首先抽象出一个责任实体,然后想象着怎么使用这个实体,把调用实体接口的代码写出来(所谓的测试用例),注意不要太快速地写接口调用代码,往往测试驱动开发会给人一种印象,就是“快速添加一个测试”,这往往会误导人,认为接口调用代码不重要,而实际上接口调用代码非常重要,因为实体还没有实现,你可以尽情想象你怎么舒服地去用这个实体,然后这个实体能切实地做好该项服务即可。这样,经过深思熟虑后抽象出来的接口能更好地展示你的设计。抽象出接口后就来实现这个实体,是实现成子系统,包,对象还是函数由你自己根据粒度要求判断。当然,这种设计在各种粒度上都是递归适用的,一个子系统有多个包,每个包都是一个责任实体,它们组合而成一个大的责任实体。对象和函数亦然。
    在实现的过程中,可能会发现一些责任不应该由该实体亲自实现,这时就要注意了:抽象出新实体的机会到了。此时重复上面的过程,抽象出该新实体的接口,编写其实现。如果该实现又需要新的责任实体,再重复上面的过程,直到抽象出底层的责任实体。然后一层层地回来,整个责任实体树就完成了,系统架构也出来了。
    如果你熟悉面向对象设计,那么这个过程,也就是所谓的“依赖倒置原则”对你来说应该不陌生。在这个原则中,夹杂着其它的面向对象设计原则,如“单一职责原则”。实际上这些原则并不限于对象设计领域,推而广之,它们都适合于整个责任实体设计领域。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值