业务逻辑层一般应该分为两部分,服务层与模型层。
服务层提供一个向表示层调用的接口,及实现。在此服务接口的基础上进行事务处理,权限控制。服务层应当是业务逻辑层对外唯一的接口,表示层只应当看到服务层的接口,并对此接口进行编程,服务层提供了表示层所需要的全部服务。
服务层建立在模型层的基础上,模型层应当是一个完备的系统,它不依赖于建立在其上的服务层,有自己的状态。一个系统可以这么来看待,有自己的状态,随时间驱动或随外界消息驱动而发生状态转化。模型层一般来说并不随时间驱动,只受服务层的消息影响,服务层有些消息是只读的,如查询,并不影响模型层的状态。有些如删除,增加,修改则影响模型层的状态。
这样看来,服务层起的作用为:提供一个事务和权限等控制的切入点,将服务转化成消息发送相关的模型对象。
在我看来,对于模型层来说,面向对象编程不如说成是面向角色编程更容易理解一些,一般来说模型层中的对象只是扮演一种角色,从编程语言角度上来说,如果扮演不同角色则需实现不同的接口,而模型层对象一般不实现接口。因此对于现实中一种类型的事物一般建模成,两种对象,一种单个对象本身,它包含自身的一些属性也就是其状态和组成部分,以及对其属性进行操作的方法。另一种为对这种类型所有对象进行管理的对象。在java视线论坛的robbin的一个帖子中,我知道第二种对象其实就是另一种类型事物的第一种对象。比如,部门,第一种对象是部门自身,第二种对象就是对部门进行管理的对象,这第二种对象的功能不过就是单位这种事物第一种对象功能的一部分。