架构设计基本原则优质PPT.ppt
《架构设计基本原则优质PPT.ppt》由会员分享,可在线阅读,更多相关《架构设计基本原则优质PPT.ppt(38页珍藏版)》请在冰豆网上搜索。
它的具体实现,可能是接口,可能是面上起着接合作用语义体。
它的具体实现,可能是接口,可能是抽象类,甚至可能是具体类。
抽象类,甚至可能是具体类。
ll从不同的视角,接口可以有以下两种定义:
从不同的视角,接口可以有以下两种定义:
1.1.接口是一组规则的集合,它规定了实现本接口的类或接口接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。
体现了自然界必须拥有的一组规则。
体现了自然界“如果你是如果你是则必须能则必须能”的理念。
的理念。
2.2.接口是在一定粒度视图上同类事物的抽象表示。
注意这里接口是在一定粒度视图上同类事物的抽象表示。
注意这里我强调了在一定粒度视图上,因为我强调了在一定粒度视图上,因为“同类事物同类事物”这个概念是相对这个概念是相对的,它因为粒度视图不同而不同。
的,它因为粒度视图不同而不同。
ll具体到具体到NN层架构中,针对接口编程的意义在部分上是这样的:
层架构中,针对接口编程的意义在部分上是这样的:
现仍约定将现仍约定将NN层架构的各层依次编号为层架构的各层依次编号为11、22、KK、N-N-11、NN,其中层的编号越大,则越处在上层,那么第,其中层的编号越大,则越处在上层,那么第KK层不应该依层不应该依赖具体一个赖具体一个K-1K-1层,而应该依赖一个层,而应该依赖一个K-1K-1层的接口,即在第层的接口,即在第KK层中层中不应该有不应该有K-1K-1层中的某个具体类。
层中的某个具体类。
依赖倒置原则依赖倒置原则ll在软件设计原则中,有一种重要的思想叫做依赖倒置。
在软件设计原则中,有一种重要的思想叫做依赖倒置。
它的核心思想是:
不能让高层组件依赖底层组件,而它的核心思想是:
不能让高层组件依赖底层组件,而且,不管高层组件和底层组件,两者都应依赖于抽象。
且,不管高层组件和底层组件,两者都应依赖于抽象。
那么,这个原则和我们上面的原则是否矛盾呢?
其实并不矛盾。
因为这个原则定义中的因为这个原则定义中的“依赖依赖”是指是指“具体依赖具体依赖”,而上面定义中的依赖全部指,而上面定义中的依赖全部指“抽象依赖抽象依赖”。
我对。
我对这两种依赖的定义如下:
这两种依赖的定义如下:
具体依赖具体依赖如果如果PP层中有一个或一个以上的地方层中有一个或一个以上的地方实例化了实例化了QQ层中某个具体类,则说层中某个具体类,则说PP层具体依赖于层具体依赖于QQ层。
层。
抽象依赖抽象依赖如果如果PP层没有实例化层没有实例化QQ层中的具体类,层中的具体类,而是在一个或一个以上的地方实例化了而是在一个或一个以上的地方实例化了QQ层中某个接口,层中某个接口,则说则说PP层抽象依赖于层抽象依赖于QQ层,也叫接口依赖于层,也叫接口依赖于QQ层。
依赖倒置原则依赖倒置原则ll从这两个定义可以看到,所谓的依赖倒置原则,从这两个定义可以看到,所谓的依赖倒置原则,正是上面提到针对接口编程,而不是针对实现正是上面提到针对接口编程,而不是针对实现编程,两者在本质上是统一的。
编程,两者在本质上是统一的。
综上所述,可以看出,本课题设计的分层综上所述,可以看出,本课题设计的分层架构,应该是这样一种架构:
架构,应该是这样一种架构:
1.N1.N层架构的各层依次编号为层架构的各层依次编号为11、22、KK、N-1N-1、NN,其中层的编号越大,则越处在,其中层的编号越大,则越处在上层。
上层。
2.2.架构中仅存在一种依赖,即第架构中仅存在一种依赖,即第KK层接口层接口依赖第依赖第K-1K-1层,其中层,其中1K=N1K=N。
封装变化原则封装变化原则ll封装变化的原则定义为:
找出应用中可封装变化的原则定义为:
找出应用中可能需要变化之处,把它们独立出来,不能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混杂在一起。
要和那些不需要变化的代码混杂在一起。
开放开放-关闭原则关闭原则ll开发开发-关闭原则定义为:
对扩展开放,对关闭原则定义为:
对扩展开放,对修改关闭。
修改关闭。
具体到具体到NN层架构中,可以描述为:
当层架构中,可以描述为:
当某一层有了一个新的具体实现时,它应某一层有了一个新的具体实现时,它应该可以在不修改其他层的情况下,与此该可以在不修改其他层的情况下,与此新实现无缝连接,顺利交互。
新实现无缝连接,顺利交互。
单一归属原则单一归属原则ll在这个架构中,任何一个操作类都应该在这个架构中,任何一个操作类都应该有单一的职责,属于单独的一层,而不有单一的职责,属于单独的一层,而不能同时担负两种职责或属于多个层次能同时担负两种职责或属于多个层次(实体类及辅助类可以被多个层使用,(实体类及辅助类可以被多个层使用,但它们不属于任何一个层,而是独立存但它们不属于任何一个层,而是独立存在)。
在)。
层次划分层次划分层次划分层次划分ll目前,典型的分层架构是三层架构,即目前,典型的分层架构是三层架构,即自底向上依次是数据访问层、业务逻辑自底向上依次是数据访问层、业务逻辑层和表示层。
层和表示层。
这种经典架构经历了时间的考验和这种经典架构经历了时间的考验和实践的多次检验,被认为是合理、有效实践的多次检验,被认为是合理、有效的分层设计,所以,在本文中,将沿袭的分层设计,所以,在本文中,将沿袭这种经典架构,使用数据访问层、业务这种经典架构,使用数据访问层、业务逻辑层和表示层的三层架构体系。
逻辑层和表示层的三层架构体系。
职责划分职责划分职责划分职责划分ll数据访问层数据访问层负责与数据源的交互,即数据的插入、负责与数据源的交互,即数据的插入、删除、修改以及从数据库中读出数据等操作。
对数据删除、修改以及从数据库中读出数据等操作。
对数据的正确性和有效性不负责,对数据的用途不了解,不的正确性和有效性不负责,对数据的用途不了解,不负担任何业务逻辑。
负担任何业务逻辑。
ll业务逻辑层业务逻辑层负责系统领域业务的处理,负责逻辑负责系统领域业务的处理,负责逻辑性数据的生成、处理及转换。
对流入的逻辑性数据的性数据的生成、处理及转换。
对流入的逻辑性数据的正确性及有效性负责,对流出的逻辑性数据及用户性正确性及有效性负责,对流出的逻辑性数据及用户性数据不负责,对数据的呈现样式不负责。
数据不负责,对数据的呈现样式不负责。
ll表示层表示层负责接收用户的输入、将输出呈现给用户负责接收用户的输入、将输出呈现给用户以及访问安全性验证。
对流入的数据的正确性和有效以及访问安全性验证。
对流入的数据的正确性和有效性负责,对呈现样式负责,对流出的数据正确性不负性负责,对呈现样式负责,对流出的数据正确性不负责,但负责在数据不正确时给出相应的异常信息。
责,但负责在数据不正确时给出相应的异常信息。
模块划分及交互设计模块划分及交互设计模块划分及交互设计模块划分及交互设计ll实体类模块:
一组实体类的集合,负责整个系统中数据的封装及传递。
实体类模块:
ll数据访问层接口族:
一组接口的集合,表示数据访问层的接口。
数据访问层接口族:
ll业务逻辑层接口族:
一组接口的集合,表示业务逻辑层的接口。
业务逻辑层接口族:
ll数据访问层模块:
一组类的集合,完成数据访问层的具体功能,实现数数据访问层模块:
一组类的集合,完成数据访问层的具体功能,实现数据访问层接口族。
据访问层接口族。
ll业务逻辑层模块:
一组类的集合,完成业务逻辑层的具体功能,实现业业务逻辑层模块:
一组类的集合,完成业务逻辑层的具体功能,实现业务逻辑层接口族。
务逻辑层接口族。
ll表示层模块:
程序及可视元素的集合,负责完成表示层的具体功能。
表示层模块:
llIoCIoC容器模块:
负责依赖注入的实现。
容器模块:
ll辅助类模块:
完成全局辅助性功能。
辅助类模块:
模块划分及交互设计模块划分及交互设计模块划分及交互设计模块划分及交互设计ll各各模模块块见见交交互互关关系系如如下下实体类的设计与实现实体类的设计与实现ll实体类是现实实体在计算机中的表示。
它贯穿实体类是现实实体在计算机中的表示。
它贯穿于整个架构,负担着在各层次及模块间传递数于整个架构,负担着在各层次及模块间传递数据的职责。
据的职责。
ll一般来说,实体类可以分为一般来说,实体类可以分为“贫血实体类贫血实体类”和和“充血实体类充血实体类”,前者仅仅保存实体的属性,前者仅仅保存实体的属性,而后者还包含一些实体间的关系与逻辑。
而后者还包含一些实体间的关系与逻辑。
ll大多情况下,实体类和数据库中的表(这里指大多情况下,实体类和数据库中的表(这里指实体表,不包括表示多对多对应的关系表)是实体表,不包括表示多对多对应的关系表)是一一对应的,但这并不是一个限制,在复杂的一一对应的,但这并不是一个限制,在复杂的数据库设计中,有可能出现一个实体类对应多数据库设计中,有可能出现一个实体类对应多个表,或者交叉对应的情况。
个表,或者交叉对应的情况。
系统的工程结构系统的工程结构ll在初始阶段,整个系统包括在初始阶段,整个系统包括66个工程,它们的职责是这个工程,它们的职责是这样的:
样的:
WebWeb表示层表示层EntityEntity存放实体类存放实体类FactoryFactory存放和依赖注入及存放和依赖注入及IoCIoC相关的类相关的类IBLLIBLL存放业务逻辑层接口族存放业务逻辑层接口族IDALIDAL存放数据访问层接口族存放数据访问层接口族UtilityUtility存放各种工具类及辅助类存放各种工具类及辅助类这只是一个初期架构,主要是将整个系统搭一个这只是一个初期架构,主要是将整个系统搭一个框架,在后续开发中,将会有其他工程被陆陆续续添框架,在后续开发中,将会有其他工程被陆陆续续添加进来。
加进来。
实体类将放在实体类将放在EntityEntity工程下工程下接口的设计与实现接口的设计与实现ll对于接口的设计。
这里包括数据访问层接口和业务逻对于接口的设计。
这里包括数据访问层接口和业务逻辑层接口。
在分层架构中,接口扮演着非常重要的角辑层接口。
在分层架构中,接口扮演着非常重要的角色,它不但直接决定了各层中的各个操作类需要实现色,它不但直接决定了各