什么是架构代码

一、架构的不同理解

计算机软件工程中,对于架构的理解,可以说是各有说辞,有的认为就是软件层次,有的认为是模块划分,有的认为是消息通讯方式,有的认为就是代码目录文件。

我们从人体本身结构来解释下,有人说人的骨架就是人体的架构,可以这样理解,但不全面,骨架人体的支撑作用。肌肉附着在骨骼上,肌肉运动需要神经来控制,所以人体的神经系统也是系统架构,各种组织干活,需要吃饭,血液循环系统也是系统架构,消化系统提供各种养分。产生的废物需要排除体外,需要排泄系统。

所以软件的系统架构也是同样的道理,需要从不同的视角进行理解。百度下搜索定义:“软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用、指导构件集成的模式以及这些模式的约束组成。软件架构不仅显示了软件需求和软件结构之间的对应关系,而且指定了整个软件系统的组织和拓扑结构,提供了一些设计决策的基本原理。”

二、设计和实现的缝隙如何弥补?

系统设计师应该为程序员提供设计原型,这样又利于将设计意图具体化,同时也是对设计模型验证,可以很好地防止软件工程返工(代码实现过程中,发生设计问题,重新进行设计更改,代码作废)。

从设计阶段过渡到实现阶段要有一个过渡期,保证有个交接期,必经设计到代码编写还是有巨大的差异,设计阶段的输出主要是设计文档,并不是一行一行的代码,有个转换的过程。而且文档的描述不同的人,理解可能也不一致。

本文比较提倡系统设计人员提供代码原型给到程序员,原型基本上是已经对设计进行了可行性的验证,没有结构性的问题。同时,原型代码也是给程序员一个基本的软件工程的模板,大大降低了程序员理解设计和实现的难度。

三、何为架构代码

有人可能认为系统设计人员写伪码也可以表示架构代码,在实际的软件工程中也是一种方法,但是就像上文说明的,伪码不太容易证明系统设计的可行性,所以还有有原型代码进行验证比较好。

那是不是原型代码要将所有的过程都验证到呢,不是的,原型代码是对系统业务的高度抽象所形成的可执行的框架代码,就像国家的公路网中的主干道,东西南北高速干道,所谓的国道,架构代码就相当于公路网中的国道,程序员只需要建设省道,市县公路,乡村公路,将这些道路连接到国道上。

 

四、如何编写架构代码

作为软件系统设计人员,一般在实现原型的过程中,需要从以下几个方面来着手。

(1)任务的划分

要将业务流程转为软件中的执行实体,那就是任务,有可能是进程,有可能是线程。系统设计中任务的划分有一些原则,比如功能汇聚,资源统一任务调度等等原则进行划分就可以。任务中不用有重复,如功能实现在多个任务中都设计,没有必要。尽量单一任务执行单一流程功能,不交叉。

举个例子,实现媒体播放器的任务划分:

UI  TASK —— 界面操作任务

NET TASK —— 网络通讯任务
MEDIA DATA INPUT TASK ——媒体数据注入任务

DECODE TASK ——解码任务

VIDEO TASK ——  视频后处理任务

VIDEO OUTPUT——视频显示任务

KEYPAD, IR TASK —— 按键检查,红外检测任务

LED  TASK —— LED刷新任务

。。。

 

 

(2)数据传递方式的选择

软件系统中很大程度上是数据传递,不同的任务,模块之间的数据传递是系统的必须。所以系统设计人员应该在这方面多下些功能,避免将此工作转嫁给程序员,程序员面临数据传递方式选择的困难,同时也容易导致使用不同的方法,增加软件的复杂度,导致软件工程质量下降。

常用的多任务系统下,使用消息队列来进行流程的异步处理,保证时序性。使用消息进行状态的迁移和状态变化的告知。系统设计过程中主要使用时序图来进行设计。使用时序图可以很方便地转换成代码。其中的消息和调用关系也比较容易梳理清楚,哪些是需要传递消息的,哪些是直接调用,哪些是状态回发。

系统设计人员需要定义基本的消息体结构和关键消息序列,代码满足可以实现业务状态流转即可,不需要完整实现,相当于有个程序模板;具体的程序员可根据模板和流程补充完整消息体结构和所有要使用的消息序列。

在业务流程中,有些是关键数据和状态,数据共享区的设计,需要系统设计人员将此转化为相关数据结构和存储结构,这部分程序员一般对全局的系统设计了解不多,很难考虑全面。比如业务流程节点数据设计,相关处理状态,前后都有关联,有的数据比较大,内存使用多,都需要统一考虑。

最后是接口部分的设计,系统设计人员需要把握设计的颗粒度,既不能太粗,也不能太细,这里有个经验,设计到层次间的接口即可,如果有时间精力关键模块接口也可以设计出来,这样方便程序员。模块接口的设计可以参考:https://blog.csdn.net/DQWKLC/article/details/91491972

(3)代码工程的建立

在代码开发的过程中,代码最终是软件代码目录文件。有的公司按照开发的人力部门组织来进行代码工程的目录组织,认为这样是人员进行代码管理方便,同时进行代码权限的管理,这种做法在软件工程中危害很大,不符合软件工程的理念。部门人员变化,组织结构一旦变化,导致代码后期维护要花费很多时间,容易交叉维护代码。开发和维护效率低,软件工程质量容易走下坡路。

通常的做法是按软件层次,从高到低进行代码目录的组织。一般层次依次是: UI界面表现层, 业务流程逻辑层,业主支撑层,基础模块组件层,设备驱动层,操作系统适配层,最后是OS层。

UI

|_UITASK.C

      |_INTERFACE1.C

      |_INTERFACE2.C

      |_INTERFACE3.C

      |_INTERFACE.C

      |_...

      |_Makefile

 

MEDIAPLAY|_PLAYTASK.C

      |_BLOCK.C

      |_DECODEBUFFER.C

      |_DECODE.C

      |_...

      |_Makefile

 

NET     

      |_RECEIVETASK.C

      |_DATAPARSE.C

      |_NETBUFFER.C

      |_SEND.C

      |_...

      |_Makefile

 

VI

      |_VITASK.C

      |_VIBUFFER.C

      |_...

      |_Makefile

 

VO

      |_VOTASK.C

      |_VOBUFFER.C

      |_VPSSTASK.C

      |_MIX.C

      |_...

      |_Makefile

 

 

最后一句话总结,软件质量高好比人有个好身板,架构代码就是好身板。

 

你可能感兴趣的:(系统设计)