Asp.net 不使用.NETMVC会犯错误吗?
Microsoft web应用程序架构相关 不知道我的新web应用程序没有使用.Net的MVC是否犯了错误?我在ASP Classic中开始web开发,并随着ASP.net的每次迭代而不断前进。在过去的几个月里,我一直对ASP.NETMVC胡作非为,只是不喜欢其中的某些部分。我喜欢路由、razor和视图特定模型的概念。但在添加了一些功能之后,我的应用程序似乎变得过于复杂了——我觉得与以前的版本相比,nopCommerce和Umbraco等MVC版本的应用程序也是如此 我回到过去,基本上开始写一个.Net网站/MVC混合版。我为实现数据注释验证的“视图模型”创建了自己的基类;一个简单的映射器,用于将表单提交绑定到模型,并将实体属性映射到模型属性,反之亦然;为分页、选中、选中和偶数/奇数等创建扩展方法和帮助程序;在不需要查看状态的Asp.net 不使用.NETMVC会犯错误吗?,asp.net,asp.net-mvc,webforms,Asp.net,Asp.net Mvc,Webforms,Microsoft web应用程序架构相关 不知道我的新web应用程序没有使用.Net的MVC是否犯了错误?我在ASP Classic中开始web开发,并随着ASP.net的每次迭代而不断前进。在过去的几个月里,我一直对ASP.NETMVC胡作非为,只是不喜欢其中的某些部分。我喜欢路由、razor和视图特定模型的概念。但在添加了一些功能之后,我的应用程序似乎变得过于复杂了——我觉得与以前的版本相比,nopCommerce和Umbraco等MVC版本的应用程序也是如此 我回到过去,基本上开始写一个
runat=“server”
中使用诸如转发器、文本和标准HTML标记之类的控件
这种方法似乎可以让我两全其美,让我的“控制器”代码接近“视图”,并且一切都在中等信任度下工作
以下是一些示例代码:
public partial class Admin_Users_RoleAdd : System.Web.UI.Page
{
protected class RoleAddModel : BaseModel
{
[Required, StringLength(100)]
public string Name { get; set; }
[StringLength(250)]
public string Description { get; set; }
public override bool Validate()
{
if (base.Validate() && Cortex.DB.Roles.Any(r => r.Name == Name))
Errors["Name"] = "Already in use";
return Errors.Count == 0;
}
}
protected RoleAddModel model = new RoleAddModel();
protected override void OnInit(EventArgs e)
{
if (Request.Form["Submit"].HasValue())
{
SimpleMapper.FormMap<RoleAddModel>(model);
if (model.Validate())
{
var entity = new Role();
SimpleMapper.Map<RoleAddModel, Role>(model, entity);
Cortex.DB.Roles.AddObject(entity);
Cortex.DB.SaveChanges();
Response.Redirect("Roles.aspx");
}
}
base.OnInit(e);
}
}
public部分类管理员用户角色readd:System.Web.UI.Page
{
受保护类RoleAddModel:BaseModel
{
[所需长度(100)]
公共字符串名称{get;set;}
[长度(250)]
公共字符串说明{get;set;}
公共覆盖布尔验证()
{
if(base.Validate()&&Cortex.DB.Roles.Any(r=>r.Name==Name))
错误[“名称”]=“已在使用”;
返回错误。计数==0;
}
}
受保护的RoleAddModel模型=新RoleAddModel();
受保护的覆盖无效OnInit(事件参数e)
{
if(Request.Form[“Submit”].HasValue())
{
SimpleMapper.FormMap(模型);
if(model.Validate())
{
var entity=新角色();
SimpleMapper.Map(模型、实体);
Cortex.DB.Roles.AddObject(实体);
Cortex.DB.SaveChanges();
重定向(“Roles.aspx”);
}
}
碱基.奥尼特(e);
}
}
以及“观点”:
添加角色
名称
说明
对于这种方法,我以后会后悔吗?目前我能想到的主要问题是测试能力,但大众快车并不支持它。你可以做任何适合你的事情。如果您是唯一的开发人员,并且永远都是,并且您深入了解您进行开发的方式,那么就去做吧 大多数方法都是关于改进长期维护的。在项目的整个生命周期中,维护占总成本的95% 但通过混合架构,您可能会设置自己的不兼容性,因为架构之间的阻抗不匹配可能很难修复 当MVC的模型绑定工作得很好时,我有点不明白为什么要编写自己的模型绑定。或者为什么您觉得需要自己进行数据注释验证。但无论如何,这是你的代码
如果你不喜欢MVC,你可以考虑使用像FuBoCVC,或者Spring .NET
< P>一些我已经参与或有同事的公司,趋势是它们都至少从经典ASP移动到.Net WebFrat,而那些正在做的.NETWebFrat现在移动到MVC!p> 一个好的、写得好的、可维护的、可靠的应用程序就是这样,而不管开发它所使用的技术是什么。您可以用任何语言或框架编写好代码和坏代码。随着时间的推移,我们获得了一些工具,使我们作为开发人员的生活变得更加轻松,但如果您是一名优秀的开发人员,那么您使用的是哪个MVC框架或XML解析器并不重要。我不喜欢微软在MVC上的实现;使用魔术字符串,说动作然后说控制器似乎有点落后,这就像必须学习一打新的语言,因为它充满了microsolutions(路由,razor) 我非常不喜欢它,所以我开始写我自己的,但是我写得越多,我越意识到它是不灵活的,我越是修复它,它看起来就越像微软的实现 在一个垃圾版本的MVC上开发了几个小时之后,我放弃了它。我已经开始回顾设计文档和代码,并在它们的顶部进行重写 少写代码 我在大约八个小时内将我糟糕的MVC应用程序的UI层重写为MS MVC。在那之前我已经做了八个星期了。假设大部分想法已经完成,那么从头开始编写MVC可能不会那么快 我使用的几乎所有东西都是现成的,除了AuthorizeAttribute类,它没有完成我希望它完成的任务 为什么这与你的问题有关 在不需要的时候编写代码是错误的。如果您已经尝试并测试了库,请重用它们,如果您没有,请在编写自己的库之前从可信的源中查找它们。我的问题都不是新问题,我也不怀疑你的问题是否也是新问题。这些问题都是由比我们大多数人拥有更多资源的人解决的 我应该停止重新发明轮子,只编写没有预先打包的代码,这一认识的一部分是,我正在工作中进行迁移项目,律师们正在讨论<h1>Add Role</h1>
<div id="MainForm" class="form">
<%= model.GetErrorMessage("Error") %>
<form action="<%= Request.RawUrl %>" method="post">
<div class="formField">
<label for="Name">Name</label> <%= model.GetErrorMessage("Name") %><br />
<input type="text" name="Name" value="<%: model.Name %>" class="required" maxlength="100" />
</div>
<div class="formField">
<label for="Description">Description</label> <%= model.GetErrorMessage("Description") %><br />
<textarea rows="8" cols="40" name="Description" maxlength="250"><%: model.Description %></textarea>
</div>
<div class="buttons">
<input type="submit" name="Submit" value="Create" class="primary" />
<a href="Roles.aspx">Back</a>
</div>
</form>
</div>