精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 系统分析>>自开版到2000-04-10待整理精华>>关于系统设计

主题:关于系统设计
发信人: walkdan1()
整理人: majorsun(2000-03-10 18:16:52), 站内信件
以下是我在进行系统分析时和设计WIS系统中产生的一些观点和想法,
希望同大家多一些交流和沟通。
----------------------------------------------------------------
系统的设计主要包括系统的逻辑设计和系统的实现设计. 逻辑设计尽量
不考虑实现, 它对实现的延伸考虑的是可不可以实现, 而不是如何实现. 
实现设计主要是表明如何实现, 其中界面设计也是在实现设计中完成的.

有些人在做设计是大多考虑的是系统的功能, 而没有考虑系统内在逻辑
上的表示. 其实在系统设计的开始就应该进行划分, 将相关的功能归为
一组, 然后对这一组进行逻辑设计. 逻辑设计是主要的, 功能是对逻辑
设计的验证和反馈.

所以最终系统完成那些功能是在系统实现时定义的. 一个设计的好的系
统是完成一类功能而不是一个功能, 可能完成的功能比用户所要求的还
要多. LotusNotes有办公系统的功能, 这没错. 但就是因为LotusNotes
非常优秀的逻辑设计, 所以它不仅可以完成办公的的要求, 而且还能完
成比办公系统多的多的可能连它自己都不曾想到的功能. LotusNotes在
逻辑定义完成后, 它可以说什么都不能做, 但对它稍做配置, 它能做很
多.

如果一个系统的逻辑不清晰, 那么注定这个系统今后的道路时坎坷不平, 
一定是修修补补改改. 错误积累大. 如果逻辑上清楚了, 则错误积累就
会小很多.

我现在做的工作主要是花在在WIS系统的逻辑设计上, 对于信息系统则主
要是定义数据, 以及数据操作.前段时间要准备写的WISAPI则表示对数据
的操作. 但由于时间和人力的关系, 没有设计出系统在实现方面的内容. 
WISAPI也没有足够多的时间完成. 所以在有限的时间内, 完成系统就要
靠个人的努力. 所以在大家理解了系统逻辑设计方面的定义后, 在实现
方面要靠个人的发挥和创造力, 来表现它的功能.

在系统实现时, 首先应该整理一份功能清单, 然后要考虑用什么方法来实
现. 其实WIS系统目前的功能可以说是比较清楚了. 如何展现这些功能? 
一个程序内部也要划分模块, 如何划分模块. 有传统的耦合关系:模块与
模块通过函数关系耦合. 也有对象耦合关系, 对象与对象通过消息耦合.
比如在Outlook中, 如果用鼠标点击左边的TreeList框, 这右边的List框
就有相应文件夹的内容. TreeList和List就是专门为Outlook设计的对象, 
TreeList获得点击后向List发出一个"打开xxx文件夹"的消息, List获得
这个消息后完成相应的动作. TreeList和List的关系就是对象关系, 通过
消息耦合. 模块与模块间尽量是松耦合关系, 关系尽量简单.

一般来说, 如果模块的功能复杂, 与事件相关, 则模块与模块间是对象耦
合关系. 这就意味着模块要对象化. 我发现很多人使用Delphi, 虽然用了
很多VCL, 但从来就没有自己构造对象, 更不用说将VCL进行继承. 系统内
部的模块关系仍然还是传统的Function关系. 程序做大了就很难保证程序
在对象关系上的清晰度. 如果所要求TreeList与List之间是对象关系, 而
系统提供的VCL-TreeList, List控件无法完全满足需要, 那么就要自己构
造对象, 或者将VCL的TreeList,List进行派生. 比如VCL的List控件肯定不
支持处理"打开xxx文件夹"消息, 所以就不要直接使用VCL-List, 因该对
其派生增加功能. 而程序中使用是这个被重新构造过的对象, 而不是直接
使用.

也许这样做会降低开发的效率, 但这只是在开始时的反映. 随着程序复杂
度的提高, 这种优势就会显现出来.

另外一方面, 如果模块对象的静态、动态关系比较复杂,一定要进行对象
的静态、动态分析,如画一些OO图(UML的图)来帮助自己整理对象的关系、
方法、事件。不要照着UML教科书上的把所有的UML图画出来,需要时才画。

我发现有很多Delphi的“高手”打开电脑后就点Delphi图标,凭着记忆开
始编程。自己没有做过任何文档,从开始到结束“一气呵成”,可谓艺高
胆大,但是往往觉得程序漂亮,却有缺少灵魂的感觉,甚至久而久之,连
自己也忘了程序是如何编写出来的了。殊不知就算对VCL,对3rd Controls、
WinAPI滥熟,终究不过是王老五的菜刀,杀鸡尚可游刃,宰牛却嫌不足。

需要说明的一点,Delphi提供了比Windows强用的多的消息机制,VCL对象
之间有可以直接传递消息。(See: TObject.Dispatch, message handlers)

-----------------------------------------------------------
WIS系统: 我们目前正在设计的一套系统

Walkdan.

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.233.83]

[关闭][返回]