.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,它不用继承任何类,直接可以抽取出,配合所需的实体类就能马上使用了
如果有什么说错的地方,请大家指正!
- 系统休眠文件删除后果 如何删除计算机的休眠文件 2025-04-22
- 站群服务器是什么意思 站群服务器的作用 站群服务器和普通服务器的区别 2025-04-22
- jQuery插件有何作用 jQuery插件的使用方法 2025-04-22
- jQuery插件有哪些种类 简单的jQuery插件实例 2025-04-22
-