« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
关注电子政务、大型企业应用开发、Web、Workflow、MOM、MDA、RCP、GEF email:gmluyang@gmail.com
|
Blog信息 |
blog名称:SixSun的Blog 日志总数:152 评论数量:372 留言数量:13 访问次数:2376535 建立时间:2004年12月13日 |

| |
[设计模式]软件设计随笔 随笔, 心得体会
SixSun 发表于 2006/3/18 11:01:00 |
经过一年的Java学习和在工作实践中不断的修改bug,自己逐渐积累了一些软件开发的经验。并在学习设计模式和UML以后给了我很多启示和思考。 就如何开始设计一个软件单元谈谈我的看法:
(1)首先我们站在一个客户端程序员的角度思考一下,假如我们要完成某些任务或功能,我们需要一些什么样的类,什么样的接口呢,这些类和接口又是以怎么样的一种方式创建和调用会更自然,友善,符合逻辑,我们假设一下已经有了这样一些现成的类和接口,并在草稿纸上写下使用它们的代码,经过多次的修改得到一些理想的类和接口;
看了测试驱动以后,觉得和我的经验有着相通之处,测试程式本身即是一个软件单元的设计蓝图,依据这个蓝图编写软件单元,我们在不需要写下任何实现代码的时候就完成了一个软件单元的构想,和我假设存在一些这样的类和接口并使用他们也是一个道理。
(2)然后我们转换一下角色,我们如何给客户端程序员提供这些好用的类和接口呢,我们将这个问题细分一下,看看我们在实现这个目标的过程中有那些地方是需要我们思考和注意的:
A.完成这个软件单元需要有那些类,有时候我们在写代码的时候总是漫会无目的的构建一些类,然后又莫名其妙的将他们丑陋的结合在一起工作,在思考这个问题的时候总是可以借鉴现实世界的事物,事实上软件开发本身就是模拟世界万物的过程,正如Thinking in Java中提到的万事万物皆对象。如果以一种自然的方式去思考有哪些对象,它们就好像现实世界的个体一样,也是需要组织,协调的,你此时是角色就变成了一个车间主任在组织生产,或是公务员在做城市规划,资源的分配,机构之间的协作等等。虽然我们不一定能够成为一个管理者,但是能将自己写的类有机的组织和协调好,也会有一种成就感。
B.当我们确定了我们可能需要的类以后,需要想一想哪些类以后将会随着功能的递增和业务的变化而改变或增加,哪些类又是相对稳定的,这个时候设计模式就排上用场了,常用的23种设计模式主要就是指导我们如何 (1)创建对象;(2)确定对象之间的关系(3)以及对象之间的合作行为;虽然设计模式有很多,如果我们从看代码的角度来观察这些模式的实现,一眼看上去会觉得没有什么差别,很多模式都是反反复复的在利用Java最基本的多态性这一语言性质,但是如果仔细去思考这些模式的名称,再去结合代码学习会觉得模式也不想想象中那么复杂,向适配器模式,代理模式等等,我们在现实世界中都能找到他们的影子,电源转换器,职业介绍所等等,如果我们能将思路放宽一些,就能实现自己的所谓模式。当然这个也不是一下子就能灵活掌握的,需要一个尝试和锻炼积累的过程,我也在不断思考和积累经验:)。
C.设计应该简单,迅速,先做一个demo出来,才会发现很多问题,一般设计到第三次的时候才会稳定下来;
其他:在思考的过程中,我们可以用一支铅笔和一张大的草稿纸记录下我们的思考过程,写下那些接口,对象,画出他们之间的交互关系,虽然有很多流行的UML工具,但我觉得远不如白板或是稿纸来得迅速方便,刚开始接触UML的时候觉得软件设计也能够向其他工程学那样用图纸来表达和设计了,但最近体会到软件开发和其他一些工程设计实施起来有着很多不同的地方,并不是想象中那么理想化,最明显的一点就是软件设计总是会受到各种临时需求的改变而不断变化,而且这种变化很频繁,这种变化势必会对现有的模块带来影响,UML工具更适合在设计确定以后用它来画一张漂亮的图纸保留下来,附上一些说明,供以后的开发人员参考和修改。
毕业后曾经和学校的师弟交流,现在在校的学计算机的一些学生积极的学习Borland Together,Rose这些流行的建模工具,以提升找工作的筹码和资本,而且在其他专业有类似的现象,比如一些学习机械专业的学生将大量的精力都画在学习AutoCAD,Pro/Engineer这些软件上,这个我觉得有些本末倒置了,工具只是辅助我们更好的完成我们的设计的一个手段,设计的来源在于我们的基础知识,实践和思考,正如这些工具名称我们也不难发现国外的设计师对他们的定义是非常准确的,这些工具一般都附上了“计算机辅助设计”的标签,而不是“计算机自动设计”,当大学成为了一些辅助软件的培训基地时候,我们的教育是不是出问题了。 |
|
|