<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      觀察者模式、MVP、MVC、三層架構

      2010-01-11 08:57  【當耐特】  閱讀(7246)  評論(12)    收藏  舉報

      .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(thisnew 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        } 

       

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

       

      代碼
       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        } 

       重構至MVC,完整代碼如下

      代碼
       1 public interface IView
       2   {       
       3           public void Show(IModel model);
       4   }
       5   public class IntertNetShow:IView
       6   {        
       7           public void Show(IModel model)
       8           {
       9            //doSomething
      10          }
      11  }
      12  public class WinFormShow:IView
      13  {       
      14          public void Show(IModel model)
      15          {
      16           //doSomething
      17          }
      18  }
      19  
      20  public interface IModel
      21  {
      22          public User GetId(User user);
      23  }
      24  public class GetIdFromDB: IModel
      25  {
      26          public User GetId(User user)
      27          {
      28           //doSomething
      29          }
      30 }
      31  public class GetIdFromXML:IModel
      32  {
      33          public User 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(model);
      49           }
      50           public void Test()
      51           {          
      52             user.IdChanged += this.OnIdChanged;
      53             //改變Id
      54           model.GetId(user);
      55           }
      56         } 

       可以看得出MVC比MVP更加松耦合!


       

      主站蜘蛛池模板: 亚洲精品一区二区三区不| 色九月亚洲综合网| 欧美性猛交xxxx乱大交极品| 一区二区中文字幕视频| 久久精品一本到东京热| 人妻在线中文字幕| 精品无码一区二区三区电影| 普定县| 国产福利深夜在线播放| 亚洲欧美日韩愉拍自拍美利坚| 国产男人的天堂在线视频| 国产女高清在线看免费观看| 亚洲不卡av不卡一区二区| 中文字幕久久精品波多野结| 国产午夜视频在线观看| 国产成人无码免费看片软件 | 国内少妇人妻偷人精品视频| www国产精品内射熟女| 中文毛片无遮挡高潮免费| 色偷偷亚洲精品一区二区| 欧美成人午夜在线观看视频| 精品亚洲欧美无人区乱码| 久久久久中文伊人久久久| 免费视频欧美无人区码| 国产精品国产亚洲看不卡| 久久精品国产99国产精品澳门| 免费av深夜在线观看| 大地资源高清免费观看| 日韩人妻无码精品久久久不卡| 亚洲一级特黄大片一级特黄| 欧美日产国产精品| 国产蜜臀在线一区二区三区| 欧美乱妇高清无乱码免费| 乱码视频午夜在线观看| 国产精品www夜色视频| 日韩丝袜亚洲国产欧美一区| 中文字幕一区有码视三区| 日韩加勒比一本无码精品| 亚洲av无码成人精品区一区 | 日韩一区二区大尺度在线| 日韩一区在线中文字幕|