架构设计是一个复杂性问题,复杂性问题的本质是关联了较多的维度或因素。类似于DNA双螺旋结构一样,架构设计的两条链路分别是用户需求和技术方案,连接点是在不同维度上的关联,比如用户对设备远程控制的需求,在技术上是基于网络或者无线的连接控制,这个具体的连接控制方式就是两条链路在这个维度上的关联。
问题:架构和设计分别是什么
上下文中的“架构”
首先在软件研发中有一个词Context(上下文),在同一个Context内相当于在同一个上下文内可以直接通讯,而在不同Context中应该尽量通过聚合根消息方式实现领域解耦,这种切割方式其实是一种处理复杂性问题的方法。现实中在同一个上下文内讨论问题才能有更好的结果,所以我们先看下不同的百科中对于软件架构设计的解释。
百度百科中对“架构设计”的解释 - "架构设计是人们对一个结构内的元素及元素间关系的一种主观映射的产物。架构设计是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。"
MBALib百科中对“软件架构设计”的解释 - “软件架构设计是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。”
上下文中的“设计”
然后单独看下“设计”的一种解释
设计(Design)是把一种设想通过合理的规划周密的计划、通过各种方式表达出来的过程。更详细的定义如下:
第一步:理解用户的期望、需要、动机,并理解业务、技术和行业上的需求和限制。
第二步:将这些所知道的东西转化为对产品的规划或者产品本身,使得产品的形式、内容和行为变得有用、能用,令人向往,并且在经济和技术上可行。这是设计的意义和基本要求所在。
软件技术组件构件
最后对比下“架构”与“设计”,在软件架构设计的生命周期中,架构更多的指的是软件技术组件或者架构构件,类似于建筑设计中的钢筋、水泥和门窗等构件,通常使用的架构构件如下。
- 语言JS/Kotlin/Java等
- 框架Spring/Netty/Dubbo等
- 设计模式/分层架构/管道过滤器架构等
- 中间件Redis/MQ/MySQL等
- 移动网络/基站/浏览器端/网关路由器等 在专业知识积累过程中,学习上面的专业技术是不可或缺的环节,但是在理解了这些专业技术后更高的要求是设计,设计就是将这些构件合理的组合在一起的方法。在大部分架构设计学习总结中,非常多的总结是偏重在“架构”,本次期望总结“设计”。
回答:架构是软件技术的组件或构件,设计是理解业务组合技术方案的过程
架构设计中的设计不仅仅是知识更多的是设计方法,设计方法的本质是“套路+经验”,其中一种套路方法是将业务需求和技术方案结构化成不同的模型,采用模型映射方式将业务需求分层递进映射到技术方案上完成设计。