依赖与分层 - 分层

分层(layering):

          是一种架构模式,将软件组件看作是水平功能层,一个完整的应用程序可以划分为多个水平功能层。分层形成的组件一个叠在另一个上面,他们的依赖关系方向必须向下。即最底层的组件没有依赖(不再依赖任何第一方代码)。通常情况下,应用程序的顶层都是用户界面,服务程序的顶层都是客户端用来与服务端交互的API。

          两种分层模式:二层划分:用户界面=》数据访问

                                   三层划分:用户界面=》业务逻辑=》数据访问

          纵切关注点:

                   面向切面编程(Aspect-Orented Programming,AOP)是代码中跨层次的纵切关注点(也称切面)的运用。

非对称分层:

      1、命令/查询分离(Command/Query Separation ,CQS):任一对象方法要么是命令,要么是查询。

                   命令是对动作的强制调用,需要代码做某些动作。这些命令方法可以改变某些系统状态但是不应返回值。

                   查询是对数据的请求,需要代码获取某些数据。这种查询方法为客户端代码返回数据但是不改变任何系统状态。(即从数据访问中查出什么数据就是什么数据,不应该修改查出数据的状态)

     2、命令/查询职责分离(Command/Qurey Responsibility Segregation,CQRS)是方法层次上的命令/查询分离原则在架构层上的应用。基于命令/查询分离原则下,命令/查询职责分离提出:命令和查询可能需要以不同的路径通过不同的逻辑层达到最优的处理效果。即命令需要通过逻辑层,而查询可以直接调用数据访问层(前提必须遵守CQS)\

     查询数据通常要足够快,也不保证具有事务一致性:为了及时响应,不完整或混乱的数据读取是可以接受的。不同的是命令处理通常都需要保证事务一致性,因此由不同层次处理命令和查询是由意义的。有些时候,数据访问层也可以区分命令和查询。由完全符合ACID标准(ACID是atomic,consistent,isolated,durable缩写,原子的、一致的、可隔离的、持久的)的数据库处理命令。

猜你喜欢

转载自blog.csdn.net/sbjhy/article/details/81272039