Sam*_*Sam 5 asp.net asp.net-mvc webforms
Microsoft Web应用程序架构相关...
想知道我是不是因为我的新网络应用程序没有使用.Net的MVC而犯了错误?我开始在ASP Classic中进行Web开发,并且每次迭代ASP.net都会向前推进.在过去的几个月里我和ASP.net MVC闲逛,只是不喜欢它的某些部分.我喜欢路由,剃刀和视图特定模型的想法.但是看起来我的应用程序在添加了一些功能之后变得过于复杂 - 当我看到nopCommerce和Umbraco等MVC版本的应用程序与之前的版本相比时,我觉得同样如此.
我回去了,基本上开始写一个.Net网站/ MVC混合.我为实现Data Annotation验证的"视图模型"创建了自己的基类; 一个简单的映射器,用于将表单提交绑定到模型,并将实体属性映射到模型属性,反之亦然; 为分页,检查,选择和偶数/奇数之类的东西创建扩展方法和帮助器; 使用像Repeater,Literals和标准HTML标签这样的控件,runat="server"不需要视图状态.
这种方法似乎让我拥有两全其美,让我的"控制器"代码接近"视图",一切都在中信任中.
以下是一些示例代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
而"观点":
<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>
Run Code Online (Sandbox Code Playgroud)
以后我会为这种方法后悔吗?目前我能想到的主要是测试能力,但VWD Express无论如何都不支持它.
我不喜欢微软对MVC的实现;使用魔法字符串,说动作然后说控制器似乎有点落后,这就像必须学习一打新语言,因为它充满了微解决方案(路由、剃刀)。
我非常不喜欢它,所以我开始自己编写,但是我写得越多,我就越意识到它不灵活,而且我越修正这个问题,它看起来就越像微软的实现。
经过几个小时、几个小时、几个小时的开发,基本上是一个垃圾版本的 MVC,我放弃了它。我已经开始回顾设计文档和代码并重写(或写在)它们的顶部
少写代码
我在大约八小时内将蹩脚的 MVC 应用程序的 UI 层重写为 MS MVC。在此之前我已经为此工作了大约八周。尽管大部分想法已经完成,所以从头开始编写 MVC 可能不会那么快。
我使用的几乎所有东西都是开箱即用的,除了 AuthorizeAttribute 类,它只是没有做我想要它做的事情。
为什么这与您的问题相关?
在不需要的时候编写代码是错误的。如果您已经尝试并测试了库,请重用它们,如果没有,则在编写自己的库之前从可信来源查找它们。我的问题都不是新问题,我怀疑你的问题也是如此。这些问题都被那些比我们大多数人拥有更多资源的人解决了。
我意识到我应该停止重新发明轮子,而只编写未预先打包的代码,部分原因是我正在工作中从事一个迁移项目,与律师讨论与某些加密例程相关的 IP 的细节。我们将需要花费数周时间编写一些代码以将数据转换为另一种格式,因为我们无法“泄露”用于保护数据的 IP。如果应用程序只是用预装库编写的,那么我们需要移交的只是数据和加密密钥。现在就已经完成了,而不是第十稿供律师讨论。
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |