文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>.Net MVC 与 Strust2 对 MVC的思考

.Net MVC 与 Strust2 对 MVC的思考

时间:2010-12-01  来源:猥琐代码男

MVC各层的解释

 

1.Model层实现系统中的业务逻辑。


2.View层用于与用户的交互。

3.Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,
同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

 

C(Control)的职责 ?

 

Control的职责是什么?

Controller 层是 Model与View之间沟通的桥梁,它可以 分派用户的请求 并 选择恰当的视图 以用于显示,
同时它也可以 解释用户的输入 并将它们 映射为模型层可执行的操作。

 

但是具体到.net mvc和struts2的时候,却发现他们做着不同的东西

 

.net mvc

 

.net mvc中可以创建许多controler,他们都必须继承Controler类,然后可以以方法名的通过Route得到用户的请求信息,同时使用了约定的方式,每个方法对应了一个默认的View视图。

 

Struts 2

 

struts2中,controler只一个,叫核心控制器,负责分派请求,沟通View和Action,Action既是struts2中的model层,通过编写Action来完成逻辑操作

 

 

以上比较发现,.net mvc中真正负责转发请求的是Route,并不是他的Controler,而struts2中确实由唯一一个核心控制器完成转发操作。

 

那么.net mvc中的controler到底有何职责呢?

 

是配合“贫血型”model做逻辑的拼装吗?

 

如果是,当重用逻辑的时候,就会因为controler继承了Controler这个基类,以至于变得难以重用!

 

有人说:.net mvc中的controler负责将用户输入委派给model层或者BLL,然后再由他们的返回确定转发到那个View上

 

确实可以这样做,但是问题是,在多种请求的情况下,就需要编写不同的controler(或者编写不同的方法)去做委派工作,而且不久后即将会发现,这些转发的操作都大致相同,完全可以抽象出一个通用的转发、委派逻辑!

 

这个做法就是struts2的核心控制器所干的事…当然也是Route本身就完全具备能力完成的…

可是.net mvc却没有那样做…

 

其实我想说的是,.net mvc中的controler貌似强了model的职责,或者是不同的controler仅仅做转发显得职责太过单薄…

 

M(Model) == 实体类 ?

 

有人说是,有人说不是…

 

我个人觉得不是,如果是,也应该是包含自身属性对系统需求的一些操作的实体类。

也就是说model应该是包含操作的

 

mvc 本身就是为了分离和重用服务的,当抽离出model来单独使用的时候,也应该包含了这个系统的处理逻辑!

如果仅仅是实体类的model(仅仅包含数据),就无法重用,或者是说这个并不是一个完整的model层,还需要配合其他类才能完整抽出逻辑

 

当然反过来想,仅仅抽取逻辑处理,没有实体类,也是重用不了的

 

例如struts2中的Action,就是一个非常好的model,它不用继承任何类,直接可以抽取出,配合所需的实体类就能马上使用了

 

 

 

如果有什么说错的地方,请大家指正!

相关阅读 更多 +
排行榜 更多 +
夕鸟

夕鸟

生活实用 下载
partyplay

partyplay

聊天通讯 下载
婚礼纪

婚礼纪

生活实用 下载