设计的6个考虑点

设计的6个考虑点

之前维护固定几个模块的时候没什么认识,后来参与了几个大功能的设计和开发,觉得在动手前,下面这个几个步骤还是要考虑清楚的:

1. 问题的本质

设计的前期需要搞清楚需求的意义,使用场景,整个产品的交付后用户真正关心的是什么,用户不能接受的场景是什么。 搞清楚是什么样的用户在什么场景下用你的产品去解决什么样的一个问题。

2. 熟悉硬件约束

一般首先并且仅仅是内存,但是对于嵌入式系统来将远远不够,在这里其实知道的越多越好。因为我们最终无法脱离硬件的约束。 CPU跟以往的比性能上是否有下降?具体差别是多少? 内核分出来的描述符,线程资源有多少? 编解码的能力是多少? 外部的介质是SSD,还是机械硬盘,可供使用的空间多大?各自的读写性能又是什么? 配置的Flash可供擦写的次数有无要求,对特定的块是否有特殊要求? IO带宽又是多大?...等等

3. 数据流

多想几个流程,你需要选一下,要清楚为什么不这样做。 在不涉及具体的数据结构和算法之前,对于数据流往往会有一个预期设计。 数据流的预期,忌讳的是只有一个想法就开始按照这个流程设计细节。 如果一个问题,没有三个及以上的方案,那就是对这个问题还没有理解。不光是要关系数据流向,也要关心数据的交互方式和交换速度。

4. 程序组织和数据结构

这里无需赘述。 数据结构不是要想清楚每一个结构体(除非是后期的协议约定),而是对数据处理和交互的整体方式上想清楚, 是链表,队列,堆栈还是别的。 程序组织就是代码的分块,各个子模块,务必保证各自的职责分明,尽量简要,对外又相互屏蔽。 当然,可伸缩性,可复用性也需要关注。

5. 性能

先明确性能方面的目标,运行起来要多快,已有的资源下达不到的花,剩下的就是决策了,看看是增加成本还是降低标准, 决策的这个点尽量提前,拖到后面往往产品已经成型。

6. 健壮性

尽可能的列举一系列的异常场景,尤其是对那些比较可能发生的事情。

 

最后,关于构建设计方面,代码大全中读到一些有用的话,做个摘录:

1. 大型系统的设计,本质是要保证“概念完整性”,好的架构应该和要解决的问题保持和谐一致,看起来很舒服,而不是感觉硬是将方案和问题绑到了一起。

2. 架构应该描述所有主要决策的动机,为什么这样做,为什么不这样做

3. 好的架构应该能灵活应对变化

4. 好的架构能实现所有需求,又没有去刻意镀金;

5. 软件中,链条的强度不是取决于最薄弱的一环,而是取决于所有薄弱环节的乘积。

posted @ 2018-12-12 20:29  doctorJ  阅读(470)  评论(0编辑  收藏  举报