这两周的一些小结
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) 编辑 收藏 举报