分层架构和传统三层架构
1、分层架构:把各个组件按照“高内聚、低耦合”的原则组织到不同的项目中。
2、传统的经典三层架构
三层架构的缺点:尽管有DAL data access layer,但仍然是面向数据库的思维方式;对于一些简单的、不包含业务逻辑的增删改查类操作,仍然需要BLL business logic layer进行转发;依赖关系是单向的,所以下一层中的代码不能使用上一层中的逻辑。
整洁架构(洋葱架构)
1、内层的部分比外层的部分更加的抽象→内层表达抽象,外层表达实现。
2、外层的代码只能调用内层的代码,内层的代码可以通过依赖注入的形式来间接调用外层的代码。简单理解,就是你平常在应用服务实现其接口(记住:应用服务调用领域服务)。然后在别的地方各种依赖注入着用。更简单理解:Angular的依赖注入各种service,service里各种逻辑,其他ts文件也可调用这个service。
recall之前比较难理解的ABP架构图的指向:
说一下开发中这种架构的实际用处:
首先是由于使用依赖注入,举个例子,读取邮件被解耦了,可替代,那么开发环境可以使用mock数据,等到了生产环境,再替换上去。仔细想了想,我们开发确实是这么操作的。
对比三层架构谈洋葱架构的优点。
它提供了灵活、可持续和可移植的架构。
各层之间没有紧密的耦合,并且有关注点的分离。
由于所有的代码都依赖于更深的层或者中心,所以提供了更好的可维护性。
提高了整体代码的可测试性,因为单元测试可以为单独的层创建,而不会影响到其他的模块。
框架/技术可以很容易地改变而不影响核心领域。例如,RabbitMQ 可以被 ActiveMQ 取代,SQL 可以被 MongoDB 取代。
防腐层 ACL
anti corruption layer
外部服务(短信服务、邮件服务、存储服务等)的变化会比较频繁。把这些服务定义为接口,在内层代码中我们只定义和使用接口,在外层代码中定义接口的实现。
体现的仍然是洋葱架构的理念。
理解一下:你平常做的任何继承接口的实现,都是在做防腐层的事情,举个例子,某一天你的验证码服务商换掉啦,只需要重新实现其对应接口。