设计模式如何学习?
模式这个词的来源是建筑学,不同的建筑所采用的建筑模式也不一样,建筑模式是特定建筑领域中 设计优秀建筑的指南。
这个词后来引入到了软件设计领域,对于不同的软件设计问题,也有相对应的设计模式来指导如何设计是最佳的。
之前学的设计原则更像是公理,而设计模式更像是定理,是设计原则公理 在特定问题下的 最佳解决方案。
因此学习设计模式就像是学习定理一样,首先学习的就是这个模式解决的是什么设计问题,根据问题去学习对应的设计模式才是最好的方式
设计模式领域最早的书籍是《设计模式》:这本书提到了23个设计模式;但是天底下的设计模式不仅仅只有23种,随着人们认识到设计模式的重要性,越来越多的设计模式被发掘了出来。因此之后又出现了《企业应用架构模式》和一套5卷本的 《面向模式的软件架构》,这些书都值得学习。
DDD
以往人们不管是面向过程还是面向对象还是函数式编程,本质上都是在围绕数据进行设计。
面向过程是对数据的执行流程 ,按照分支条件 ,模式匹配 进行设计
面向对象 是对数据的功能,定义出发 重新组织数据,
ddd的根基:通用语言和模型驱动的设计
- 通用语言:这里的通用值得并不是技术领域的,而是技术领域和业务领域的通用语言。比如业务人员(关注业务领域)眼里看到的和技术人员(关注技术领域)看到的是截然不同的。
- 而软件设计是要在问题和解决方案中间打一座桥梁,好的设计要更接近问题这样才能提前识别更好应对业务需求的变化。 通用语言的出现就人为的打破了 技术人员 和问题之间的隔膜,让程序员可以更接近问题
- 如何建立起通用语言:事件风暴。之前的编程方式都是从数据出发,不管怎么设计都是为了更好的组织数据。而ddd要求 先从 领域中有哪些关键事件和结果出发;再从事件和结果出发 思考 做这个事情达成这个结果 要经历哪些行为哪些步骤;再去思考 这些步骤所涉及的概念实体有哪些。
这个步骤正好和面向对象的设计思想相反,面向对象针对的还是数据,但是ddd针对的是领域,领域会更加稳定。
2.模型驱动的设计:
ddd的模型驱动设计:
概念:模型驱动,在ddd里面的模型就是领域模型(一个个业务域),面向对象里面的模型就是对象模型。
组成:领域模型驱动设计,这里的设计有高层和底层设计,对应的就是战略设计和战术设计。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!