如何使用技术与为什么使用技术,哪个更重要?(2010-03-23)

这些天,在为一个前辈开发的项目(08年的开发项目)做性能优化和版本升级。由于是前辈的项目,所以说这个项目并非我本人设计,这对我来说到是个不错的锻炼。因为我在此之前的将近三年工作中,几乎都是以自己设计软件为起始的,这种版本升级式的开发我并没有接触过。
在这里我先承认一些自己的不足(这算是自曝不足吧,呵呵),虽然我以前是做开发的,但是我对开发技术本身的研究并不十分充分,我更多的精力是花在学习OOAD、模式设计和分布式等软件设计方面上了。所以说这个项目中大量的存储过程、函数、视图等技术方面的应用让我在技术方面的水平着实增进了不少。
上面说了一大推铺垫,下面将是我要表达的感想。首先在进行之前系统的性能优化上,我的想法是相当多的。在我看来一个软件系统应该是4层架构,数据库应该只是数据库的增删改查和他们之间的关联处理。但是现有系统中300行左右的存储过程就不少,里面“if”、“switch”层出不穷,真不知道当时是怎么设计的。这里我要说明一下我对与存储过程一点小理解。首先,存储过程这个技术本身我不否定,是个好东西,但是各位朋友请大家记住一点,存储过程中一定不要出判断、条件之类的内容。按道理来说,存储过程是系统和数据库交互的最底层接口,应该仅仅带有交换数据的基本操作,除此之外的操作都是应该尽力避免的,因为那都是业务逻辑层的事情。要是各位遇到了像我这个项目,那可谓维护起来难之有难,我觉得说噩梦也并不过分(反正我是这个认为的)。所以我想在这里强调一下,各位进行软件设计和开发的朋友们(这里重点指软件设计的朋友),在我们设计软件的时候,存储过程这个技术固然重要,但是如何使用才是最最最重要的。不用存储过程,照样有好的高性能的程序这也是完全可能的。正所谓“书法大师不必使好笔”,你看那些晚会表演,大师拿墩布照样写出好字来。(当然换了我,多好的笔都没用,我书法不咋样)
上面是我对于乱用存储过程的一点小抱怨,呵呵还希望朋友能够借鉴这个教训,使自己的软件水平更加高哦。
再说点OO和OP的内容吧,想在面向对象分析和设计(OOAD)越来越得到大多是设计和开发人员的认可和赞扬,大家都在使用c#和java语言。我们都知道这两中语言是典型的对象语言,但是我在这里想说的是,并不是说我用c#或者java就叫面向对象编程。我要强烈指明“使用面向对象语言≠进行面向对象分析和设计”,这也是这次项目给我感触最深的地方。面向对象是一种思想,往大了说的话我认为可以说是一种境界,我相信如果有相当高的智商和面向对象思想境界的汇编开发高手,拿汇编语言照样能写出面向对象的代码。但是现在的软件开发能,是反过来了,用面向对象的语言写面向过程的程序。我还拿现在这个项目举个例子,在项目中竟然有一万行以上的对象和几千行的函数。我敢百分之百的说这就是面向过程的代码,即使你说你用的是c#。为什么呢?原因是,在面向对象设计中,对象应该是高内聚低耦合的,所以说打死我也不信一万行的对象、几千行的函数和50多个的成员变量都是做一件事情的。说实话,我都很少设计和编写超过500行的对象,一般是以300行为基准的,一旦超过300行就要审视自己的代码了,是代码冗余了,还是对象不够内敛。希望大家能够以我现在这个项目为教训,在进行软件设计和开发的时候,关注一些自己对象的程度、职责。是不是内敛的。
最后还要一点要罗嗦的就是分布式,其实我在之前的文章中已经写过一点点自己关于分布式,层设计的一些想法。我之前一直都是先设计层,后设计内部对象的,当然这是针对较大的项目的。要是就几个界面,十分小的项目,用不用无所谓,维护并不会很难。我现在的这个项目就是稍微有点大的项目了,按照OO的思想,设计分布式也应该是合情合理的,但是就没有,硬要说成两层的话也跟没分差不多。页面上数据库都含有,维护真是郁闷到家了。针对我的耐心真是有了极大的磨练。当然这里的重点不是抱怨,我来简单的说下为什么要分布式。首先要是java程序员都应该知道SSH和SEH吧(不知道的话自己补补吧,我也无语了)。为什么MVC三层架构这么多年来在软件界经久不衰,基于MVC的框架也得到广大开发和设计者的好评。要知道“经典是永远经得住历史的”。就拿spring来说,两个最最基础的思想是“依赖注入”和“切面”(别的还有,但不是本文要说的)。其实就软件设计本身来说,这两个思想是十分优秀的。就算我不用spring框剪,我使用c#、.net进行软件开发,“依赖注入”和“切面”也仍旧是一种软件设计思想,如何设计通用接口的设计和抽象,包、容器的策略、机制、依赖等设计和抽象都是需要我们进行不断的练习。面向对象思想在这之中都是要始终贯彻的。只有这样,我们设计或者开发出软件才是可扩展的、易读的、高水的软件。出来的代码才是经典,才能沿用、积累和复用。
罗嗦了那么多就是要说一件事,从存储过程到对象设计再到软件框架,虽然层次是一个比一个高,但是这些都技术,我们会用这些技术仅仅是基础的基础。更重要的是我们要知道为什么用,使用的原因,不应该乱用,也不可一概不用。在设计中如何结合我们OO的思想和类似这些技术,才是最为重要的,才是这些技术的最大体现。

posted on 2012-02-10 15:12  张隽永  阅读(330)  评论(0编辑  收藏  举报