对于什么是业务逻辑,每个人都有自己的看法,我就讲讲我自己的想法,欢迎大家讨论。
例如,一个现金报销单的审批程序,不同人员对不同金额的审批权限明显就是属于业务逻辑的范畴,因为请假审批程序则不会有此问题存在。
请假单有四种状态:草稿,审核中,已核准和已拒审
...
1.如何实现数据访问(以及事务的处理)
2.异常处理
3.日志和追踪如何实现
4.缓存策略的设计
5.对象的动态组装和更新替换
6.以何种UI呈现
7.UI与系统服务如何衔接
8.系统如何分层,各层之间如何衔接
...
上面这些我想是一个系统的基本框架,是系统的底层架构。
因此整个系统分为2个问题域
1.业务逻辑:与系统如何实现无关,例如是C#还是Java,B/S 还是 WinForm,Oracle还是Sql Server。
2.底层架构:与业务逻辑无关,大多与软件实现方式相关。
用户大部分时候比较关心业务逻辑,当然他可能要求要Oracle以及web方式实现。如果是这样,则底层架构的设计会依赖在某一具体平台之上。
很多时候,UI也是有业务逻辑的。
如对于不同类别请假单显示为不同颜色,这其实也属于业务逻辑的一部分。
if(核准)
color = "绿色"
else if(拒审)
color = "红色"
else if(审核中)
color = "蓝色"
else
color = "黑色"
因为当哪天需求发生变更,又多了一种状态(如退回),也要修改此UI程序。
识别出了业务逻辑,那设计时应该如何实现这些业务逻辑了。
系统拒绝了一个访问者对于他没有权限的请假单的查看请求。
系统将一张事假超过了20天的请假单送给了总经理审核。
系统授予了总经理在登录之后审核特殊请假单权限的许可。
对于这些逻辑的实现,系统一般不会留下痕迹,但它确实做了这部分工作。
无论是区分底层架构还是识别各种各样的业务逻辑,一个终级目的--就是为了重用。
将业务逻辑中关于权限的需求提取出来,提供一个可重用的权限解决方案。
将业务逻辑中的流程部分提取出来,提供一个通用的工作流方案。
将业务逻辑中对于数据的验证提取出来,提供一个通用的验证方案。
将业务逻辑对于多国语言的要求提取出来,提供一个通用的多语言解决方案。
将业务逻辑对于UI的相同或相似要求提取出来,提供一个通用的UI解决方案。
等等。。。
从底层架构到通用的业务逻辑解决方案,这些工作做得越多,具体系统开发时就会做得越少,这其中如何把握平衡,则是系统架构者的能力体现了。