● 什么是软件设计?
对软件做设计本质上就是对这个需求进行建模,软件需求是多变的,但其背后的模型机制相对稳定。
设计软件而不是做软件本质的区别是一个是在深刻理解需求后对需求进行建模而另外一个只是简单的堆叠需求逻辑。
● 如何进行建模?
需求模型是一个模型系统,其中存在着多种部件。
如何构建部件?(定义模型里面涉及到的名词,从定义中拆解得出该部件的职责是什么?)高内聚低耦合
部件和部件之间如何进行通信?(不同部件完成不同工作,关注的问题和职责不一样,但是系统是部件协作才能运转的)
● 为什么要分离关注点(藕荷的系统是混乱的)
建模的本质是分析,分析需求背后的模型。(对需求进行定义)
计算机系统里面的分层思想,分而治之 就是在分离系统中的各个部件,每个部件都应该高内聚低耦合。
其次框架不应该和具体技术实现相关(两个不同的维度。抽象的好处),技术也不应该和业务相关(两个不同的维度。要区分这是技术需求还是业务需求,是业务的领域还是技术的领域。技术异常不是业务异常,因此不能让上层业务知道这个技术异常)
● 如何快速了解一个框架
也是根据模型-接口-实现步骤来熟悉。看代码和写代码的过程一样,写代码需要识别出关键模型,模型之间的交互接口最后在写具体实现;看代码也是 不能直接拿到代码就去看,因为代码是有层次的,不同层析的代码一起看是混乱的,同样学代码时也要有层次。
不同层次的代码一起阅读是混乱的。
首先应该识别出该系统中是由哪些核心模块组成(快速了解一个系统在设计层面如何构建的,有哪些关键模块),然后再去看这些核心模块提供出来的借口有哪些(了解这些模块之间是如何进行协作的)最后再去看具体实现。
速度快效率高
先看森林在看树木,有体系有结构的去熟悉一个系统
● 如何了解一个系统里面的模型
模型是业务需求系统或者现实世界问题的抽象建模,因此为了理解模型,第一步就是熟悉业务,理解问题,了解业务中涉及到的几个名词;再然后了解模型的演进,因为模型的目的是为了解决现实的业务问题,需求和问题是不断发生变化的,了解业务和问题的变化对业务更加理解也就都模型更加理解了。
一句话就是模型是对现实世界需求业务和问题域的抽象所设计出来满足某些能力的系统,因此了解模型必须要了解需求,熟悉需求,了解问题。
比如di模型(依赖注入,也算一个小模型,解决的是对象如何创建组织的问题。只要是问题就有对应的模型,可大可小),要了解这么一个模型,一个是搞清楚他是什么,解决了什么问题,如何进行演进的,这样就可以深入理解这个模型了。
说架构和设计的时候同样也按照这样的思路:需求是什么问题是什么,需求系统中的模型建模和痛点,模型的边界和透出的能力是什么?采用什么实现的。
● 如何快速了解一个系统里面的接口?
两步走:找主线和看风格。
接口体现了各个模型之间是如何进行沟通协作交互的,也可以从透出的接口侧面了解出 框架作者的设计风格,希望各部件之间如何协作完成工作。
快速了解接口的方式就是看文档,最终程序运行是接口之间的调用,而一个功能的实现是多个模型协作的结果。
● 如何了解一个软件的实现?
看哪些实现?:软件里面的实现是不稳定的,且实现是一张大网,如果陷进去就是几个月也不会有结果,所以只需要抓关键的实现和 与自己有关的实现即可。没有目的的看会迷失。
如何看实现?:也是两步走,看结构和关键技术
同样也需要先看模型和接口,再然后看整体的关键实现的结构图,看结构图的时候要带着一个目的:如何设计的这个结构图?这个结构图有哪些问题?;再然后看关键技术的时候也要去多想:用关键技术怎么解决的问题。为什么用这个技术的问题?
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。