学校放假了,刚回家的孩子就像个客人被父母招待着。在放假的前几天里,你尽管开口,想吃啥爸妈都会满足你,不过好景可不长!在我家,厨房是老妈的地盘,买菜、做饭、洗碗刷锅,一个人全包了。而在饭店吃饭呢,吃饭的人多了,顾客点的饭菜种类各不相同。前前后后,一个人忙乎,哪里顾得过来,所以饭店就有了分工。前台服务员负责将顾客点的菜上报给厨师和;厨师根据上报的菜单做菜;采购员负责柴米油盐酱醋茶。这样,大家各司其职,井井有条。
我们在家中吃饭比较简单,没有具体的分工。饭店就是一个复杂庞大的系统了,需要合理规划,分工明确。一个优秀的软件系统首先要有一个好框架,好的架构能够实现高内聚、松耦合,从而提高软件的可扩展性、可复用性、可维护性以及灵活性。在软件体系架构中,分层结构是最常见的,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,自上至下分别为:表示层、业务逻辑层、数据访问层。下面请看一张图,将饭店与三层式结构联系在一起,将学习融入生活。
这里说得三层是逻辑上的划分,不要和物理三层混淆了,物理上的这三层指的是:客户机、应用服务器、数据库服务器。接下来,我们来具体认识这三层。
表现层(UI):采集用户的输入信息和操作,向用户展现特定业务数据。通俗讲就是用户界面,即用户在使用一个系统的时候他的所见所得。
业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。主要有三种方式:从UI中获取用户指令和数据,执行业务逻辑;从DAL中获取数据,以供UI显示;从UI中获取用户指令和数据,通过DAL写入数据源。
数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
还有一个实体层(类),它在这三层之间上蹿下跳,借用晨阳博客中的比喻,这个实体层好比是信件,B层就是U层和D层之间传递信件的联络员,他是不知道信件的内容的。
在这三层中,DAL 只提供基本的数据访问,UI只负责显示和采集用户操作,他们都不包含任何业务相关的逻辑处理。BLL负责处理业务逻辑,通过获取UI传来的操作指令,执行业务逻辑,在需要访问数据源的时候交给DAL处理。处理完成后,返回必要的数据给UI。UI引用BLL,BLL引用DAL,由上到下可以引用,反过来行不通。这三层都可以引用实体层(类),但实体层不能去引用别的层。
使用三层的好处有很多,开发人员可以只关注整个结构中的某一层,有利于分工协作,降低层与层之间的依赖。当某一层需要更改时,不会影响到其它层,降低了维护成本和维护时间。不同的业务需求调用同一个数据表时,相同的代码只需写一次,有利于各层逻辑的复用和标准化,实现软件系统的高内聚,松耦合。One coin has two sides。这样做的弊端就是由于增加了中间层,不能直接访问数据库,从而降低了系统的性能。有时会导致级联的修改,如果在表示层需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。当然也增加了开发成本。在实际的软件开发中,具体情况要具体分析,权衡好利弊。