Microsoft Web应用程序架构相关...
想知道我是不是因为我的新网络应用程序没有使用.Net的MVC而犯了错误?我开始在ASP Classic中进行Web开发,并且每次迭代ASP.net都会向前推进。在过去的几个月里我和ASP.net MVC闲逛,只是不喜欢它的某些部分。我喜欢路由,剃刀和视图特定模型的想法。但是看起来我的应用程序在添加了一些功能之后变得过于复杂 - 当我看到nopCommerce和Umbraco等MVC版本与之前的版本相比时,我觉得同样如此。
我回去了,基本上开始写一个.Net网站/ MVC混合。我为实现Data Annotation验证的“视图模型”创建了自己的基类;一个简单的映射器,用于将表单提交绑定到模型,并将实体属性映射到模型属性,反之亦然;为分页,检查,选择,偶数/奇数等事物创建了扩展方法和帮助器;使用不需要视图状态的带有runat="server"
的Repeater,Literals和标准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);
}
}
和“观点”:
<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>
以后我会为这种方法后悔吗?目前我能想到的主要是测试能力,但VWD Express无论如何都不支持它。
答案 0 :(得分:2)
一个好的,编写良好的,可维护的和可靠的应用程序,无论用于开发它的技术如何。您可以使用任何语言或框架编写好的代码和错误的代码。随着时间的推移,我们获得的工具使我们的生活变得更容易,但如果您是一个优秀的开发人员,那么您碰巧使用哪个MVC框架或XML解析器并不重要。
答案 1 :(得分:2)
我不喜欢微软在MVC上的实现;使用魔法字符串,然后说控制器的动作似乎有点落后,它就像必须学习十几种新语言,因为它充满了微观解决方案(路由,剃刀)。
我非常不喜欢它,所以我开始写自己的,但是我写的越多,我就越觉得它不灵活,我修复的越多,就越像它的微软实现。
基本上是一个垃圾版本的MVC经过数小时和数小时的开发后,我放弃了它。我已经开始回顾设计文档和代码,并在其顶部写下
编写较少代码
我在大约八小时内将我糟糕的MVC应用程序的UI层重写为MS MVC。在那之前我已经做了大约八个星期了。当然,大部分思考已经完成,所以从头开始编写MVC可能并不那么快。
我使用的几乎所有东西都是开箱即用的,除了AuthorizeAttribute类,它没有做我想做的事。
为什么这与您的问题相关?
在不需要时编写代码是错误的。如果您已经尝试并测试了库,那么重用它们,如果您没有,那么在编写自己的库之前,请从可靠的源中查找它们。我的问题都不是新问题,如果你们有任何问题,我也不会怀疑。他们已经被拥有更多资源的人解决了。
我应该停止重新发明轮子并且只编写未预先打包的代码的一部分,我正在研究工作中的迁移项目,律师讨论与某些加密例程相关的IP的更精细点。我们需要花费数周时间编写一些代码来将数据转换为另一种格式,因为我们无法“放弃”用于保护数据的IP。如果应用程序只是用固定库编写,那么它只是我们需要移交的数据和加密密钥。现在可以通过现在而不是第十稿来让律师讨论。
答案 2 :(得分:0)
你可以做任何适合你的事情。如果你是唯一的开发人员,并且永远都是,并且你深刻理解你的开发方式,那就去吧。
大多数方法都是为了改善长期维护。在整个计划生命周期内,维护占总成本的95%。
但是通过混合架构,您可能会因为架构之间的阻抗不匹配而难以解决的不兼容问题。
当你编写自己的模型绑定器时,我有点困惑,因为MVC的模型绑定工作得很好。或者为什么您觉得需要进行自己的数据注释验证。但不管怎样,这是你的代码。
如果你不喜欢MVC,你可以考虑使用像fubumvc或spring.net这样的东西
答案 3 :(得分:0)
我参与过的一些公司或有同事的公司,趋势是他们至少从经典的ASP转向编写.Net WebForms,而做.Net WebForms的公司现在正在转向MVC!
答案 4 :(得分:0)
这个没有正确的答案。
想到的唯一答案就是这样:正确工作的正确工具。
我的个人意见虽然是前一天经典的ASP.NET。是的,他们从你那里抽象出HTML,但是,他们开始所有这个MVC项目是有原因的 - 人们(专业人士)不满足于将web写成经典应用程序,无法控制渲染,没有结构。此外,MVC还考虑了经典ASP.NET之后的所有现代Web技术。 Ruby on Rails就是一个很好的例子 - DRY&amp; COC原则。 MVC模式还可以使您的应用程序更加结构化,并提供良好的关注点分离......
正确工作的正确工具