zoukankan      html  css  js  c++  java
  • 如果有一个这样的需求,您会如何设计?考考你的设计能力:)

     

        一个给客户定制开发的项目接近尾声了,已经开始上限测试,写程序的时候一直在思考,这个项目怎么这么乱呢,到底差在哪里了?由于对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同上。

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

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

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

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


  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/jyk/p/1244632.html
Copyright © 2011-2022 走看看