领域驱动六边形架构与分层架构的区别
作为一个后端程序员,MVC三层架构的模式相信大家都不会陌生,三层分别从上而下排布,只能由上层调用下层。一般越往下层越通用,越上层越细节。 随着某些核心业务的访问量发展,通常我们需要去进行优化的措施,比如加缓存,加MQ,换数据源 1.缓存可选redis,memcache 2.MQ可选kafka,rocketmq,rabbitmq 3.数据源可选:mysql,mongodb,elasticsearch 当然,我们在做这些优化的时候,会将mq,mongodb等看成基础设施层。 由此衍生出四层的架构,infrastructure里封装redis和mq的通用调用逻辑 这些优化的动作,通常不会改变原有的业务逻辑。但是为了做优化,我们会将它写在service层,比如: 1.执行成功就发个MQ 2.执行某个事件的时候,同步一下缓存 3.依赖关系为,domain依赖infrastructure 问题点: 按道理来说,domain层是写业务逻辑的,优化不会涉及到业务逻辑的改动,但是却改动了domain层。由于domain层依赖了infrastucture的原因,导致业务依赖于具体的实现技术。所以,为了将业务与具体实现做分离,我们采用依赖倒置的手段去重构 依赖倒置原则的包含如下的三层含义: 1.高层模块不应该依赖低层模块,两者都应该依赖其抽象 2.抽象不应该依赖细节 3.细节应该依赖抽象