抛开项目流程,让我们来谈谈“技术流程”吧!!
谈到流程,很多人立刻就会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说,这些流程仅仅是项目管理上的概念,只有项目经理开例会时那红红绿绿的甘特图、燃尽图、路径图等,或者只有评估工作量和是否要加班的时候,我们才会意识到这些流程的存在。
通俗的讲,项目管理上的流程主要是用于指导项目经理如何管理项目用的,但对于如何指导开发人员如何开发项目,并无多大用处。一个典型的情况就是刚毕业的大学生,软件工程掌握的很熟悉,各个开发阶段应该做什么,瀑布流程有什么优缺点等,谈起来都头头是道,但真的参加开发项目后,就会发现有一种无从下手的感觉。例如:
Ø 需求分析阶段要分析需求,但具体怎么分析呢?
Ø 客户的需求是描述性的,例如“我们需要一个POS机”,而代码是一个一个具体的类和函数,那么如何从描述性的语言最后转化到具体的类和函数呢?
Ø 具体语言的特性,例如Java和C++的private、protected、public这些属性是从哪里来的?什么时候设计的?
Ø 面向对象的类、接口等,是怎么设计出来的 ?
相信这些问题都曾经困扰过很多人,但软件工程并没有给出这些问题的答案,因此也就导致了很多开发人员在实际开发过程中,要么只能在别人的指导下工作,要么就瞎蒙乱撞、拼凑堆砌,反正最后也能够实现需求,至于效果嘛,那就要看运气了。少数几个领悟力强的人,经过一段时间的磨练后,也许就慢慢掌握了门道,但大部分人可能就一直原地踏步,不断的在重复别人分配给自己的工作。
其实,就像项目管理上有一套完整的流程一样,项目开发也有一套完整的过程,尤其对于面向对象来说,整个开发流程其实是非常清晰的,只是很少有人将这部分归纳总结提炼出一套用于指导开发人员进行开发的流程。
为了区别起见,我们将瀑布模型、敏捷开发等称为“管理流程”,而将面向对象开发流程称为“技术流程”。面向对象的技术流程可以概括如下:
需求模型 -> 领域模型 -> 设计模型 -> 实现模型
l 需求模型
通过和客户沟通,结合行业经验和知识,明确要求客户的需求。
l 领域模型
基于需求模型,提炼出领域相关的概念,为后面的面向对象设计打下基础。
l 设计模型
以领域模型为基础,综合面向对象的各种设计技巧,完成类的设计。
l 实现模型
以设计模型为基础,将设计模型翻译为具体的语言实现,完成编码。
以上流程环环相扣,上一步流程的输出就是下一步流程的输入。后面我们可以看到,通过这种一步一个脚印的方式,即使是经验并不丰富的菜鸟,也能完成从需求到最后实现的相关工作,而不再需要仰望和崇拜其他大虾大牛,或者自己摸着石头过河了!
个人总结:从拿到项目开发需求的那一刻,就应该仔细阅读需求,然后冲面向对象的角度,抽象出操作的pojo对象,然后进行概要设计,如具体分析类中包含哪些属性和方法,以及类与类之间的关系,然后进行详细设计,包括数据库表和子段的设计,然后进行开发