RSo*_*erg 13 asp.net asp.net-mvc
我现在已经使用ASP.NET MVC完成了我的第一个Web应用程序,总体而言,我仍然没有理解为什么这会得到所有的赞誉和荣耀.也许我很固执.我知道MVC很棒的原因是表示层与业务对象或数据层之间的力量分离以及无状态操作.我也知道,当您使用视图时,似乎代码的可读性较差(请参阅下面的示例).
所以我想我的问题是......如果分离是关注,为什么不分开.
Web窗体查看代码:
//UI
<h2><asp:Label ID="lblPageHeader" runat="server" /></h2>
Run Code Online (Sandbox Code Playgroud)
Web窗体代码背后:
//CODE BEHIND
this.lblPageHeader.Text = myObject.Header;
Run Code Online (Sandbox Code Playgroud)
MVC代码视图:
//UI
<h2><%= Html.Encode(Model.PageTitle) %></h2>
Run Code Online (Sandbox Code Playgroud)
MVC控制器代码:
index = new Index
{
PageText = sb.ToString(),
PageTitle = "WELCOME"
};
return View(index);
Run Code Online (Sandbox Code Playgroud)
同样,我可能很顽固,但我在WebForms中真正喜欢的一件事就是设置像DataSources和Text值这样的对象属性.似乎这在MVC中完全不同,而且可读性较差,这使我对长期维护感到疑惑.
编辑 在查看类型模型后,我认为代码的可读性大大提高.
Kon*_*kus 14
我会写:
<h2><%= Html.Encode(Model.Title) %></h2>
Run Code Online (Sandbox Code Playgroud)
(在键入的视图的帮助下可以)
代替
<h2><%= Html.Encode((MyApp.MyObject)ViewData["PageObject"].Header) %></h2>
Run Code Online (Sandbox Code Playgroud)
我认为这都是关于你如何使用它的.如果你对经典的ASP.NET更满意,那么坚持使用它可能会更好.此外,您还可以从ASP.NET MVC世界(如UI和逻辑分离)中获取好的东西,并将其带入经典的ASP.NET.
Der*_*ess 10
ASP.NET MVC的优点在于它不会试图隐藏HTTP的工作方式.要完全了解ASP.NET MVC,您需要了解Web的技术.
虽然webforms只要你发挥自己的优势就足够了,但是当你不这样做时,它们最终会成为一个非常漏洞的抽象.虽然viewstate的缺点已经被这一点得到了很好的讨论,但我认为模仿Winforms的行为是非常不明智的尝试,这是潜在的缺陷 - viewstate只是其中的一个产物.
随着尝试构建可访问网站的任何人都可以证明,随ASP.NET一起提供的Web控件也会留下一个(地狱般的)很多东西.网络控件显示对前端开发的完全缺乏了解,坦率地说是一种耻辱.
使用ASP.NET MVC,所有这些废话都被废除了.您不会受到HTTP,HTML,CSS或JavaScript的影响 - 如果您使用这些技术来参加聚会,框架就会不受影响并让您利用它们.如果没有,那么幸运的是它不会试图帮助你假装它们不存在.
不是一个完整的答案,但一个大问题是ASP.NET Forms的可测试性,或缺乏它.测试显示内容的UI逻辑以及如何显示.使用ASP.NET Forms,您只需要代码隐藏.
现在,MVC并不适合所有人.您可能希望查看ASP.NET Forms的MVP(模型 - 视图展示器),因为它使用非常相似的MVC概念,除了Presenter控制更改视图的内部.
但是,可测试性对于测试代码来说确实是一个很大的优势.例如,当有人点击ChangePassword方法/操作时会发生whawt:
[TestClass]
public class AccountControllerTest
{
[TestMethod]
public void ChangePasswordPostRedirectsOnSuccess()
{
// Arrange
AccountController controller = GetAccountController();
// Act
RedirectToRouteResult result =
(RedirectToRouteResult)controller.ChangePassword(
"oldPass", "newPass", "newPass");
// Assert
Assert.AreEqual("ChangePasswordSuccess"
, result.RouteValues["action"]);
}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢MVC的一件事(中有很多)是它摆脱了Web服务器控件.虽然他们被许多人视为关于WebForms的一件好事,但我发现,一旦你超越基本操作,他们就会变成一场噩梦.尝试使用回发和其他所有内容来处理网格上的数据绑定事件成为意大利面条代码的OO版本.
MVC将要求您更好地了解Web开发的基本租户(GET,POST,REQUEST,HTML,CSS,JAVASCRIPT),结果会好得多.看看我认为MVC是如何工作的图:-)
替代文字http://www.baseestate.com/webformsmvc.gif
归档时间: |
|
查看次数: |
1519 次 |
最近记录: |