麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

把【觀察者模式】【MVC】【三層架構】說透

2019-11-17 03:53:28
字體:
來源:轉載
供稿:網友
最近發現好多朋友 觀察者模式 MVC  三層架構不分,所以獨立開篇,把他們說明白說透!而且有很多理解誤區,列舉如下:
誤區一:觀察者模式==MVC
誤區二:三層架構==MVC
誤區三:asp.net MVC==MVC
誤區四:WebForm編程模型沒有用到MVC



.NET內置觀察者模式

MVC的由來?

三層架構的由來?

秉著重構的思想,一步一步從觀察者模式重構到MVC重構到三層架構!



【一】.NET內置的觀察者模式--事件

1     public class MyEventArgs : EventArgs
2         {
3             PRivate int id;
4             public int Id
5             {
6                 get{return this.id;}
7             }
8             public MyEventArgs(int id)
9             {
10                 this.id = id;
11             }
12         }
13
14         public class User
15         {
16             public event EventHandler<MyEventArgs> IdChanged;
17             private int id;
18             public int Id
19             {
20                 get { return id; }
21                 set
22                 {
23                     id = value;
24                     IdChanged(this, new MyEventArgs(id));
25                 }
26             }
27         }
28
29
30        public  class Controller
31        {
32          User user = new User();
33          private void OnIdChanged(object send, MyEventArgs args)
34          {
35            //把改變后的Id顯示在網頁里面
36             ShowInInerteNet(user);
37          }
38          public void Test()
39          {          
40            user.IdChanged += this.OnIdChanged;
41            //改變Id
42             user.Id="1314";
43          }
44        }



這就是觀察者模式,就這么簡單。



【二】MVC的由來

如果我不想讓id顯示在網頁里,我要讓他顯示在winform窗體里,那么類Controller的程序要頻繁滴改動,根據開放關閉原則----對擴展開發  對修改關閉,所以很容易讓人想到抽象出顯示方式的。所以有:

1 public interface IView
2 {
3         public void Show(User user);
4 }
5 public class IntertNetShow:IView
6 {
7         public void Show(User user)
8         {
9          //doSomething
10         }
11 }
12 public class WinFormShow:IView
13 {
14         public void Show(User user)
15         {
16          //doSomething
17         }
18 }
19       public  class Controller
20        {
21          //這里可以實現依賴注入
22          private  CustomShow customShow=new IntertNetShow();
23          User user = new User();
24          private void OnIdChanged(object send, MyEventArgs args)
25          {
26             customShow.Show(user);
27          }
28          public void Test()
29          {          
30            user.IdChanged += this.OnIdChanged;
31            //改變Id
32             GetIdFormDB(user);
33          }
34        }




上面是user.Id是直接賦值,現在我想從數據庫中讀出id的值或者從xml中讀出user.Id的值,那么Control類就需要頻繁的修改。根據開發關閉原則-----對擴展開發  對修改關閉,也和上面同樣的思想,把改變Id的方法抽象出來。

1 public interface IModel
2 {
3         public void GetId(User user);
4 }
5 public class GetIdFromDB: IModel
6 {
7         public void GetId(User user)
8         {
9          //doSomething
10         }
11 }
12 public class GetIdFromXML:IModel
13 {
14         public void GetId(User user)
15         {
16          //doSomething
17         }
18 }
19    public  class Control
20        {
21          //這里可以實現依賴注入
22          private  IView view=new IntertNetShow();
23          //這里可以實現依賴注入
24           private  IModel model=new GetIdFromDB();
25          User user = new User();
26          private void OnIdChanged(object send, MyEventArgs args)
27          {
28             view.Show(user);
29          }
30          public void Test()
31          {          
32            user.IdChanged += this.OnIdChanged;
33            //改變Id
34            model.GetId(user);
35          }
36        }


所以重構完成===》MVC.   完整的代碼如下:



代碼
1 public interface IView
2 {
3         public void Show(User user);
4 }
5 public class IntertNetShow:IView
6 {
7         public void Show(User user)
8         {
9          //doSomething
10         }
11 }
12 public class WinFormShow:IView
13 {
14         public void Show(User user)
15         {
16          //doSomething
17         }
18 }
19
20 public interface IModel
21 {
22         public void GetId(User user);
23 }
24 public class GetIdFromDB: IModel
25 {
26         public void GetId(User user)
27         {
28          //doSomething
29         }
30 }
31 public class GetIdFromXML:IModel
32 {
33         public void GetId(User user)
34         {
35          //doSomething
36         }
37 }
38
39    public  class Controller
40        {
41          //這里可以實現依賴注入
42          private  IView view=new IntertNetShow();
43          //這里可以實現依賴注入
44          private  IModel model=new GetIdFromDB();
45          User user = new User();
46          private void OnIdChanged(object send, MyEventArgs args)
47          {
48             view.Show(user);
49          }
50          public void Test()
51          {          
52            user.IdChanged += this.OnIdChanged;
53            //改變Id
54           model.GetId(user);
55          }
56        }




細心的朋友可以發現,這很像webform和winform編程模型。對!webform和winform也用了MVC。

所以說ASP.NET MVC和WebForm都只不過是以不同的方式MVC罷了·····     那么三層架構又是怎么來的呢?三層架構是用來面對怎么的變化的呢?請聽下回分解。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九九热免费精品 | 91久久国产露脸精品国产护士 | 欧美激情性色生活片在线观看 | 国产精品自拍片 | 免费毛片电影 | 久久成人国产精品入口 | 免费国产在线观看 | 福利在线国产 | 孕妇体内谢精满日本电影 | 国产精品视频二区不卡 | 日本欧美一区二区三区视频麻豆 | 666sao| 国内精品久久久久久久影视红豆 | 男女羞羞视频在线免费观看 | 亚洲欧美日韩精品久久 | 看片一区| 欧美日韩精品中文字幕 | 最新一级毛片 | 欧美在线观看视频一区 | 日本a级免费 | h色在线观看 | 亚洲四播房 | 久久精品久| 91麻豆精品国产91久久久无需广告 | 黄网站色成年大片免费高 | 国产精品久久久毛片 | 国产精品午夜未成人免费观看 | 天天干导航 | 麻豆19禁国产青草精品 | 欧洲成人综合网 | 国产a级网站 | a集毛片| 九色中文| 国产日韩在线观看一区 | 国产一区二区三区视频在线观看 | 亚洲欧美aⅴ | 狠狠干五月天 | 欧美另类在线视频 | 亚洲欧美日韩一区二区三区在线观看 | 久久性生活免费视频 | www.射|