不知道“软件抽象”这个标题能否恰好表达出我想表达出的意思,暂且就起这个名字吧。随着工作经验的增加,对软件开发所涉及的技术知识体系的理解也渐渐地清晰(起码自己是这么感觉的^_^),思考了若干时间后,拿出来给自己一个和大家交流的机会。

1、起源
这个想法起源于一次项目方案讨论例会,会上我们的项目遇到了“存储资源瓶颈”,遂有同事提出一个类似“数据中心”的方案,但考虑到部门目前没有相关经验和数据供参考,大家就否定了这一想法,会上我也并不赞同这一方案。会后坐在电脑前仔细考量了一下,又想起以前部门一弟兄曾提出的“将业务和通讯协议分离”的想法,感觉这是一个很有“前途”的方案。考虑到部门目前的业务模式和软件类别,将“协议和存储”从各个系统中分离出来将是一个很“革命性”的做法。会后又和两位要好的“战友”探讨过这个问题,他们也一致赞同。虽然我们的想法是美好的,但是毕竟我们不是领导,我们也只能在私下“愤青”一把。

2、观点
“软件是存储、通信、UI(user interface)和业务逻辑的紧密结合体。”
a) 在软件的生命周期中,较稳定的是存储和通信,最易变化的是业务逻辑;
b) 在软件的层次上,存储和通信一般处于底层,而业务逻辑处于最上层;
c) 不同类别的软件,其侧重点有所不同。如对于应用程序,其关注点应该在“业务逻辑”。

这些观点也许并不是什么新颖的,你可能在很多资料中都曾见到过类似的字眼儿。我觉得上面的观点有这么三点作用(现在我想到了三点^_^)。

a) 指导你的学习,制定你自己的学习计划。

我自己也回顾了一下我入司后的学习历程,其实也都是围绕着这个观点。下面简单列举几个每个方面涉及的知识领域:
存储 — 虚拟存储系统(自认为是存储技术的一次标志性技术,在《深入理解计算机系统》一书中有很好的阐述)、文件IO等。
通信 — 内部通信包括进程IPC、线程管理等,这种通信技术较为成熟;外部通信包括TCP/IP、Socket等。
业务逻辑 — 现在很多建模技术及软件过程都是围绕和针对业务逻辑的,如UML、RUP和敏捷过程等。
UI — 这个并不是很熟悉,但我相信在这方面也有太多的知识和技巧了。

b) 理解软件的发展
软件技术发展依旧那么迅速,我们可以从上述四个方面来理解:
存储 — 如微软即将在下一代操作系统中推出的新一代的文件系统、新一代数据库技术等;
通讯 — 内部通讯技术经过几十年的发展已经趋于成熟,但是外部通信技术还在突飞猛进的发展,如分布式、IPV6、VOIP、及时通讯技术以及在更火爆的无线通讯领域的各种技术等等;
业务逻辑 — 如Ivar最近提出的“主动软件”及SMART过程等;
UI — 我关注的不多,不举例了。

c) 思考你的设计
就像我们的项目,更加清晰的设计就是将存储、通信方面都都分离出来作为底层的支撑系统。对应这四个方面思考你的设计,不知道你是否已经有了些许想法呢。

3、小结
写到这也许起名为“软件抽象”有些言过其实。但一时也想不出什么更加“地道贴切”的名字,就暂用它撑撑门面吧!^_^。

© 2005, bigwhite. 版权所有.

Related posts:

  1. tony说设计-实践后的体会
  2. Advanced CVS
  3. 同步问题讨论-Tony与Alex的对话系列
  4. APR源代码分析-文件IO篇
  5. APR源代码分析-共享内存篇