MicrosoftWebアプリケーションアーキテクチャ関連...
新しいWebアプリケーションに.NetのMVCを使用しないことで間違いを犯しているのではないかと思いますか?私はASPClassicでWeb開発を開始し、ASP.netの反復ごとに前進してきました。私は過去数か月間ASP.netMVCをいじくり回してきましたが、その一部が気に入らなかっただけです。私はルーティング、かみそり、そして特定のモデルを表示するというアイデアが好きです。しかし、いくつかの機能を追加した後、私のアプリは非常に複雑になっているように見えました。nopCommerceやUmbracoなどのアプリのMVCバージョンを以前のバージョンと比較すると、同じことが当てはまると思います。
私は戻って、基本的に.NetWebサイト/MVCハイブリッドを書き始めました。データアノテーション検証を実装する「ビューモデル」用の独自の基本クラスを作成しました。フォーム送信をモデルにバインドし、エンティティプロパティをモデルプロパティに、またはその逆にマップするシンプルマッパー。ページング、チェック、選択、偶数/奇数などの拡張メソッドとヘルパーを作成しました。リピーター、リテラル、標準の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);
}
}
そして「ビュー」:
<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>
このアプローチについて後で後悔することはありますか?現時点で私が考えることができる主なことはテスト能力ですが、VWDExpressはとにかくそれをサポートしていません。