这两周的一些小结

by zhouXin

 

很抱歉,最近没有更新。国庆以来2周的工作还没来得及总结。

 

这周我简略介绍一下三层架构的实现。

因为我只是做了,而没有把怎么框架的内部思想总结过,所以观点可谓幼稚和片面,大家包涵。

若有讲错的,不吝指教哈。

(高手别看)

 

一、为啥要分层。

比如我是一个卖果汁的,我不必了解果汁是谁做的,更不用了解是怎么做的,也不想了解水果是哪里产出的。我只要管销售策略,怎么挣钱就够了,甚至进货我都可以交给别人做。

假如我是做物流的,同理,我不管你怎么销售,不管你卖什么,只管从哪里运输到哪里。

工厂,农民也一样。

 

这里就涉及到层次的问题,我只管我需要了解的那一层。

这样就方便工作的执行。

 

二、怎么分呢。

为了简单起见,我把这跟从水果到卖果汁分成2步,因为这个比较典型啦。

 

未命名

 

职责:

商店:卖

农:等人做

 

这个过程我们可以用代码这么表示

//定义3个类
class store
{
     //商店
}

class factory
{
//do factory thing
}

class farmer
{
//do farmer thing
}

然后我们开始工作

public void dojob()
{
     store Mstore = new store();
     factory Mfactory = new factory ();
     farmer Mfarmer  = new farmer ();
     
    // 工厂拿果
  Mfactory <-Mfarmer .product; 
    // 工厂加工
  Mfactory.dosomejob();
    // 商店拿货
  Mstore<- Mfactory.product;
    //商店卖
  Mstore.dosomejob();    
}

这个代码有个问题就是,这个城市的商店不会只有一个,果汁厂也不会只有一间,农民就更多了。

其实这是个多对多的关系,那这个代码是行不通的。假如我是工厂,我想换个农民,我要A农民,不要B农民的,甚至说我想要果子最便宜的

,那这里就会有问题。Mfarmer这个对象代表了最便宜的么?

所以我们就要用到接口这个概念。

接口是一个特殊的类,但是继承他的“子”类要完全实现他的方法。

就跟插口一样,我神舟电脑的2脚插座必须接2脚的插头。

 

举个例子,interface指的是接口

    interface 农民
    {
        void 能种田()
        { 
        }
        void 能卖果()
        { }
    }

    class A农民:农民
    {
        static public void 能种田()
        {
            ;//do
        }
        static public void 能卖果()
        {
            ;//do 
        }
    }

    class B农民 : 农民
    {
        static public void 能种田()
        {
            ;//do
        }
        static public void 能卖果()
        {
            ;//do 
        }
    }

那么无论你A农还是B农,你都是农民。

所以我厂商拿果的时候

Mfactory <-Mfarmer .product;

就可以改成

农民 某一农民 = 给我一个农民(这是选择农民的条件);

Mfactory <-某一农民 .product;

 

给我一个农民这个方法怎么实现

这就是另一个概念:工厂概念(与图的工厂不同,这里的工厂是抽象的)

就是一个实现选择后提供对象的功能。

 

给我一个农民这个函数的实现大概是这样的

    class 抽象工厂
    {
        static public 农民 给我一个农民(string 条件)
        {
            if (条件 == "条件1")
            {
                A农民 a实例 = new A农民();  //大多情况下这里会用到反射机制,这里就先不谈了。
                return a实例;
            }
            else
            {
                A农民 a实例 = new A农民();
                //大多情况下这里会用到反射机制,这里就先不谈了。

                return a实例;
            }
        }
    }

 

完整的代码应该如下:

public void dojob()
{
     store Mstore = new store();
     factory Mfactory = new factory ();
     
    // 工厂拿果
  农民 Mfarmer = 抽象工厂.给我一个农民("最便宜的");
  Mfactory <-Mfarmer .product; 
    // 工厂加工
  Mfactory.dosomejob();
    // 商店拿货
  Mstore<- Mfactory.product;
    //商店卖
  Mstore.dosomejob();    
}

 

这里大家可以发现,这样即使A农民今后不在便宜,那么果汁工厂是管的,只要抽象工厂管了,那么就可以保护果汁工厂这层不受影响。

那么大家更可以发现,不知是农民可以换,工厂也可以,我这个商店想要换“最便宜的”工厂进货也同样可以这么做。

 

那这部分大家可以自己去做一下。

 

三、小小总结。

分层是另外一个目的为了今后好维护,就上面的例子来说,农民是会变的,所以我们把选择农民这个任务给分了出去。

那假如工厂也会变的,那工厂还要分。

 

就MVC的角度来说,我们目前所做的项目来说,没有任何东西会变,只有页面会变的情况下,分层是大可不必的。

 

 

其实大家看看我的发表时间就知道,我是赶出来的,很多东西没有讲得清楚,大家如果想深入了解必须得自己研究。

谢谢各位。

posted on 2010-10-17 11:21  gdutlab624  阅读(161)  评论(0编辑  收藏  举报

导航