引入间接隔离变化(三)

  间接在分层架构中体现尤为明显,引入层实则就是引入间接性。利用间接对变化进行隔离,使得变化只能影响一层。例如在领域层与数据库之间引入数据访问层,就可以隔绝因为数据库发生的变化对领域带来的影响。

  在分层架构中,我们应尽量保证在某一层中所有用到的组件都工作在同一个抽象层中,这意味着需要谨慎处理对象之间的协作,尽量避免跨层之间的调用。如果不同的层部署在不同的服务器,就会带来不必要的消息处理,增加了网络跳数与带宽占用。抛开性能不谈,跨层调用产生的依赖,可能破坏层的内聚性。倘若必须依赖于底层,我们也应该减少对底层的依赖点。要减少这种依赖,可以在同一层中提供一个间接接口,用于处理对底层的依赖关系,从而将变化集中于一处。

  对于模块和组件中的对象协作,同样遵循这一原则。假设系统定义了报表引擎组件,它需要调用数据引擎组件提供的服务,驱动引擎执行数据库查询,以获得报表所必须的数据。一般采用的设计如下图所示:image   这样的设计充分体现了抽象的原则,保证了ReportEngine与DataEngine组件之间的松散耦合。在ReportEngine组件中,与报表相关的许多领域对象都需要调用DataEngineService,以获得报表所需要的数据。然而,我在设计时并未满足于DataEngineService接口引入的间接,而是在ReportEngine组件中再度引入了一层间接,我将其定义为DataEngineRepository,它属于报表引擎的领域范围:

public interface DataEngineRepository {
public List<Map<String, Object>> find(
CommandInfoPreparing commandInfoPreparing);
}

it知识库引入间接隔离变化(三),转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。