1700462883
设计模式之禅 第15章 命令模式
1700462884
1700462886
15.1 项目经理也难当
1700462887
1700462888
我是公司的项目经理,在国内做项目,项目经理需要什么都懂,什么都管。做好了,项目经理能分到一杯羹;做不好,都是项目经理的责任。这几乎是绝对的,我带过很多项目,行政命令一压下来,那就一条道:做完做好!
1700462889
1700462890
虽然我们公司是一个集团公司,但是我们部门的业绩是独立核算的,也就是说,我们部门不仅可以为集团公司服务,还可以为其他甲方服务,赚取更多的外快。2007年,我曾负责一个比较小的项目(但是项目的合同金额可不少)——为某家旅行社建立一套内部管理系统。该旅行社的门店比较多,员工也比较多,这个内部管理系统用来管理客户、旅游资源、票务以及内部事务,整体上类似于一个小型的MIS系统。客户的需求比较明确,因为他们曾经自己购买了一套内部管理系统,这次变动基本上是翻版;而且这家旅行社也有自己的IT部门,技术人员之间语言相通,比较好相处,也没有交流鸿沟。
1700462891
1700462892
该项目的成员分工采用了常规的分工方式,分为需求组(Requirement Group,RG)、美工组(Page Group,PG)、代码组(我们内部还有一个比较优雅的名字:逻辑实现组,这里使用大家经常称呼的名称,即Code Group,简称CG),加上我这个项目经理正好十个人。刚开始,客户(也就是旅行社,甲方)很乐意和我们每个组探讨,比如和需求组讨论需求、和美工讨论页面、和代码组讨论实现,告诉他们修改、删除、增加各种内容等。这是一种比较常见的甲乙方合作模式,甲方深入到乙方的项目开发中,我们可以使用类图来表示这个过程,如图15-1所示。
1700462893
1700462894
1700462895
1700462896
1700462897
图15-1 旅行社项目开发过程类图
1700462898
1700462899
这个类图很简单,客户和三个组都有交流,这也合情合理。那我们看看这个过程的实现,首先看抽象类Group,如代码清单15-1所示。
1700462900
1700462901
代码清单15-1 抽象组
1700462902
1700462903
public abstract class Group{
1700462904
1700462905
//甲乙双方分开办公,如果你要和某个组讨论,你首先要找到这个组
1700462906
1700462907
public abstract void find();
1700462908
1700462909
//被要求增加功能
1700462910
1700462911
public abstract void add();
1700462912
1700462913
//被要求删除功能
1700462914
1700462915
public abstract void delete();
1700462916
1700462917
//被要求修改功能
1700462918
1700462919
public abstract void change();
1700462920
1700462921
//被要求给出所有的变更计划
1700462922
1700462923
public abstract void plan();
1700462924
1700462925
}
1700462926
1700462927
大家看抽象类中的每个方法,其中的每个都是一个命令语气——“找到它,增加,删除,给我计划!”这些都是命令,给出命令然后由相关的人员去执行。我们再看3个实现类,其中的需求组最重要,需求组RequirmentGroup类如代码清单15-2所示。
1700462928
1700462929
代码清单15-2 需求组
1700462930
1700462931
public class RequirementGroup extends Group{
[
上一页 ]
[ :1.700462882e+09 ]
[
下一页 ]