分享
 
 
 

把【观察者模式】【MVC】【三层架构】说透

王朝学院·作者佚名  2010-01-12
窄屏简体版  字體: |||超大  

最近发现好多朋友 观察者模式 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罢了····· 那么三层架构又是怎么来的呢?三层架构是用来面对怎么的变化的呢?请听下回分解。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有