代码改变世界

如果有一个这样的需求,您会如何设计?考考你的设计能力:)

2008-07-16 20:12  金色海洋(jyk)  阅读(3124)  评论(28编辑  收藏  举报

 

    一个给客户定制开发的项目接近尾声了,已经开始上限测试,写程序的时候一直在思考,这个项目怎么这么乱呢,到底差在哪里了?由于对OO不熟悉,所以也没敢使用面向对象的方式进行设计,还是用面向过程的思路来编写的,乱的原因是什么呢?难道面向过程就一定会乱吗?如果用OO的方式来设计,会是什么样子呢?带着这些疑问发了这个帖子,希望各位高手能够帮忙看看,一起讨论一下,多多交流。

    经常看一些高手用鸭子、电饭锅、热水器等来作例子讲解OO,讲解如何设计,那么为什么不拿一个真实的项目来做实例呢?以前不太明白,现在知道了一点。

1、复杂度,真实的项目往往比较复杂,一下子不容易理解,里面会涉及很多的专业术语,不容易理解。

2、版权,对于客户来说,不仅仅数据是保密的,一些业务流程和管理方式都是要保密了,拿出来讲解,就有可能带来不必要的麻烦。

3、对于公司来说
,一段代码都是要保密的,大家都签过保密协议吧,弄不好的话也会比较麻烦。

    那么怎么办呢?项目快作完了,应该整理一下思路,看看项目中的得失,整理一下积累的经验。另外还想请各位高手帮忙看看这样的项目,如果使用OO的方式来设计,要怎么设计?所以我打算用一个“虚拟”的快餐厅,来比喻一下这个项目,就是把真实的业务逻辑,客户需求,转变成快餐厅的形式。以避免不必要的麻烦。由于是完全不同客户,所以有一些地方会比较很牵强,请大家谅解。


    jyk快餐厅要开始营业了,欢迎大家光临,希望大家能够帮助这个快餐厅更好的发展下去,下面简单介绍一下快餐厅的业务。

主食:小笼包、饺子、烧麦、豆沙包等,以后会增加。
工序:和面、擀皮,拌馅,包(包子、饺子等),上屉蒸熟,收款。
采购:有专业的采购员,根据客户的预定,采购需要的原料。


快餐厅想要做的几个模块 :

1、人员管理

     营业员、采购员的自然信息、学历信息、劳务合同等的记录。

     采购员的采购能力、级别、能够采购的原料的管理。

     根据客户预定的主食,选择适合采购员进行采购,同时生成采购员的日程表,以便更好的管理。

2、客户管理
     客户采用会员制,可以订餐。要记录客户的基本信息,客户的预定信息(保留历史记录)。客户还可暂停预定、退订。

3、主食的制作工序的记录

     每一道工序都要记录一些信息,以便计算成本等(这里有点牵强,没有想到更好的表现方式)。


4、财务管理
    简单的计个账就可以了。

5、提醒管理
    根据客户的预定信息进行提醒,比如今天中午有哪些客户预订了哪些食物。


看起来好像不太难,如果让您来评价难度的话,您会给几分呢?

ps:说点题外话,假设你是项目经理(或者是业务员),客户给你了这样的需求,然后让你报个价,你会怎么办呢?假设这是一个私活,让你给个价,你会要多少?

 

    看起来挺简单的,但是内部的关联是很复杂滴,先说点简单的情况。

    增加馅的种类,什么牛肉的,鸡肉的,香菇鸡肉的,鸡蛋西红柿的,鲜虾的,多弄点弄个几百种。包子、饺子、烧麦都可以用这些陷,由于陷的种类非常多,原料的采购就需要专人来负责了。

    要找几百个采购员来采购这些原材料,采购员有等级之分:初级、中级、高级;
    采购员可以采购的原料也有区分,比如有的只能够买鸡蛋,有的能够买西红柿和鸡肉;
    一次能够采购多少原料也有区分,比如有的一次能够买十斤的原料,有的可以买100斤。

    这些都是有严格规定的,不能弄错了。

    食物的制作过程也很严格。每一个流程都要认真做好记录,比如和面用了多少面,斡出来多少皮儿;用多少原料拌出来多少陷;包出来了多少的包子(饺子、烧麦、豆包),用了多少时间等等。这些信息都需要记录下来,还要记录这些食物都是哪个客户预定的。流程方面的字段大约有100多个,分布在几个工序里面。

ps:这里是很牵强的,我也没有想道更好的方式,您就不要想,快餐厅这么做是否合理的问题了,因为实际的项目不是快餐厅。

    客户可以预定套餐,这里也有点特别,套餐是按天来计算的,一天三餐,如果定的是包子套餐的话,早、中、晚会做出来三份包子,等待客户来品尝;如果预定饺子套餐的话,那就是三顿饺子了。其他的事物也是一样。当然可以定多份套餐,比如您可以预定包子+饺子套餐,那么早上是包子和饺子,中午饺子和包子,晚上,还是一样。

ps:有点郁闷,总是吃这些,快餐厅也快关门了,看来自己编故事的能力很差,不过真实的业务逻辑就是这个样子的。

    客户订餐之后,一般就不能退了,如果中午的没吃的话,会推迟到晚上,晚上的推迟到夜宵。还可以加餐,晚上加班了要另外来一份夜宵。

    最后,客户的订餐信息要和工序的信息合在一起,比如一个客户定了一套包子套餐,从1月1日开始。那么就要从1月1日开始作记录,分别记录早、中、晚三餐的每一道工序的相关信息,一天三餐就要分别记录,一天就是三份记录。如果要加夜宵的话,那么一个客户一天就是四份记录。

    还要和采购员的采购记录挂钩,就是说,这个客户的早餐定了哪种食物(比如哪种陷的包子,可以是一种,也可以是多种),派了哪些采购员,采购了哪些原材料。一顿饭就要采购一回(不管是定了几种食物)。月底还要抽查,查看一下采购员是否有能力合资构来采购这些原材料。最后要出一些汇总报表。


=================================================

    好像有点乱,估计是没说清楚,里面也有很多牵强的地方,可能看后是一头雾水,其实还有好多复杂的情况没有说呢。

    比如上面说的是一个人来吃饭,那么如果是一家三口来吃饭呢?可能爸爸要吃包子,孩子要吃饺子,虽然是三个人来,但是要看成是一个客户,工序信息要合并在一起,付钱的时候也是一个人来付账。所以要看成是一个客户。


项目已经快结束了,结对没有骗解决方案的意思,写出来是想和大家一起讨论一下,这样的项目怎么设计才好。如果没有弄清楚的话,欢迎询问。

 =========================补充======================

一般的流程

(一) 预定一种食物
1、客户甲定了一份牛肉萝卜包子,服务员记录后选择采购员。
要先选择有卖包子陷的资格的人,然后找能够卖牛肉和萝卜的人,如果找不到既能买萝卜又能买牛人的人,那么就得找两个人。然后还要看“承重”能力,比如要买50斤萝卜,某人只有40斤的采购能力,那么也是不能选的。还有负责的地区,还要考虑时间上不能冲突。

2、各个工序记录相关信息。客户甲订的牛肉萝卜包子的制作工序的信息,这个要详细区分。
客户甲订的包子的早餐的各个工序的记录;午餐的、晚餐的,都要分别记录。

3、预定时间
    记录客户的预定时间,比如早餐是几点,午餐几点,晚餐几点,是否需要夜宵,需要的话是几点,这些都要详细记录,随时修正的,以便及时做好,免得让客户就等。预定早餐的时候,就要记录午餐和晚餐的时间,如果午餐的时间有变化的话要及时更正,必要的话,可能要一起修改晚餐的时间。

4、提醒。
    根据客户的预定时间,进行提醒。没有提醒的话,很容易漏掉某个客户的某顿饭。

(二) 预定多种食物
1、客户甲定了一份牛肉萝卜包子和一份三鲜馅饺子,服务员记录后选择采购员。

这回要找既有买包子陷资格的人,同时还有买饺子馅资格的人,找不到的话,只能派两个人去;然后是具体的食物,牛肉、萝卜、鸡蛋、虾仁等。同上。

2、各个工序记录相关信息。客户甲订的牛肉萝卜包子、三鲜馅饺子的制作工序的信息。
两种食物,但是工序要一起记录,为了避免麻烦,“客户”要求在同一个页面录入信息,不能打开一个页面录入包子的,关闭;然后再打开,在录入饺子的。客户嫌麻烦,一定要在同一个页面搞定。

3——4同上。

特殊流程
(一)不同步的情况
    第一天只预定包子,第二天想加上一份饺子。
    或者早餐预定的是包子,到了中午想加一份饺子,但是一天三份是不能少的,就是说虽然是中午才定的饺子,但是早餐的饺子也是要有的,中午要吃早上的饺子,晚上吃中午的,还剩下晚上的饺子,那么就要流到第二天早上(会保证不变质的)。要不就晚上多吃点,把中午的和晚上的都吃掉,在不行的话打包。(这里又是很牵强,甚至很霸道,没办法。真实的业务流程就是这样)

(二)推迟订餐、取消某一天的订餐或者不订了。

(三)一家三口来进餐,但是要看做一个客户,要派一组采购员采购,不能一个人一组。三个人来进餐,不是派出来三组采购员,而是要合并成一组,一起采购。

可能某一天妻子要“独立核算”,就是要单独出来,看成是另一个客户,但是要记录以前他们三个人是一起的,订了哪些食物,那一天分开的,之后又分别订了哪些食物。(当然都包括工序的信息)


2