私ASP.NET MVC応用構造化が必要ですか?
-
11-09-2019 - |
質問
していた通りのチュートリアル(具体的にはものを使用Linq To Entities)といった理解に基づくりが考えられました一部のものを与えてくれます。
のチュートリアルは通常のみ関連したものである場合に限単純なモデルを形成するだけ活用基礎の作成、更新、削除します。鉱山はちょっと複雑なので、なんなのかっこのなか時間の関係をデータベースオブジェのチュートリアルを停止です。
の方法は、通常通りの業務粗
entities.AddToTableSet(myClass);
entities.SaveChanges();
んだいが完全に実施されクラスなの掲載のコントローラー方法。いることがあります個々の分野の形コレクション、または複数のDTO物およびそのメソッドの呼び出しサービスまたはリポジトリの情報を受信フォームからポストは、情報で検索を作成し、それらすべてのものをデータベースオブジェクトで保存します。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// Validation occurs here
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// Logging and exception handling occurs here
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
EntityB eB = new EntityB
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
私のお取り扱いもしくは正しく表示されまbastardizingをさせていただきます。ったものを実際に利用者オブジェクトを直接またクエリについての情報が必要にDTOベース私の考えを切りました。同じ飛行機の乗り継ぎ待ちです。はこれにより、又は私の回避を主体に直接に反することを目的に使用させていただきます。
編集:私も、このアプローチすることが必要なことから、空のコンストラクタを適切にLINQクエリではこのエラーメッセージ:
みparameterlessコンストラクタおよび initializersサポートされLINQを ます。
このかとても助かりま稀に必要な論理intのコンストラクタは、この問題にはないコンストラクタのみ公開。
解決
_someRepositoryOrService.Add(id、クラスa,classB);
いいカップルでのごリポジトリの発表。こんなのままです。ごリポジトリ事をとる。次に、通知の方法の追加方法
public void Add(int id、クラスaクラスa,ClassB classB)
休憩分離の懸念(SoC)でこの二つの課題
- 地図データ入団体
- 保存リポジトリ
明らかに最初の一歩きすることが発表。考えるモデルを用いたバインダーです。でも解決のためのコンストラクタの問題からモデルのバインダーできるを知っていなければならない施工条件です。
チェックもこの優れた ポスト によるジミーボガード(共著ASP.NET MVC行き)約ViewModels.このルだけを更新したいのですが--の自動化マッピングしました。でも示唆される反転技術をコントローラの仕事に対ViewModels!カスタムアクションフィルモデルのバインダーさんのキーを日常のこん所属のコントローラーなインフラ-プラクティスビューおよびコントローラです。例えば、 こちらの'sかに自動化事業体retrival. こちらの'sかどうコントローラーだ。
の目標はここではコントローラcontentrate管理のビジネスロジックは別として、アメリカのすべての技術的内容により記載すべき利害関係はない。でtechical制約についてお話しいただけまでこの問題は、できるようになってしまいますし漏洩へのコードです。ご利用いただけます。MVC移動するための道具にしていインフラです。
更新:いや、リポジトリな対応フォームのデータは、そうのは、"カップリングでプレゼンテーションの".はい、リポジトリのコントローラもあるんですが、その仕事の形データです。きるき)の形が手掛けた"リポジトリデータ"-する主体が、その一例などNerdDinnerがないのです。この原則の親指の高層連結可能な低いもの(発表の結果リポジトリや主体)ながらも、低レベルとの結合を高いもの主体に依存リポジトリのリポジトリに依存形モデルです。
最初のステップですべてのリポジトリ、その権利を除き、このマップオブジェクトからClassXにEntityXのいずれにも属さないこと。このマッピングの関心は、インフラです。を入手している。 この うにマッピングが一般の場合二層(UIやリポジトリ)な気にマッピング-mapperは、サービス-ヘルパー。横ジミさんのブログも読むことができASP.NET MVC行なえない CodeCampServer のためにどのようにマッピングを行うとIEntityMapperタに渡されるコントローラのコンストラクタことに注意することよりマニュアルの少ない作業アプローチとジミーボガードのAutoMapper).
それともう一つ。についてのドメイン駆動型のデザイン、記事、その中から、がんについてです。これらのガイドラインは、厳しいソリューション。がプロジェクトに対応できることはしばらく時間がかかる場合を処理することができますこと、などです。しているこの技術をそれらは一般的には優れたと承認を行い開発がわからないから盲目的でよりよい学習をより適用を知らない.
他のヒント
私はのDTOを使用し、独自のデータアクセス方法とEntity Frameworkのをラップし、ビジネス層に行くのに最適な方法であると言うでしょう。あなたは多くのコードを書いてしまうかもしれないが、それは、Entity Frameworkの生成されたコードをふりをより良いアーキテクチャは、ビジネス層であるのです。
これらの問題は、本当に、必ずしもどのような方法でASP.NET MVCに縛られていません。 ASP.NET MVCは、基本的には、モデル/データアクセスを行う方法には何の指針を与えていないし、ASP.NET MVCのためのサンプルとチュートリアルのほとんどは、生産価値のあるモデルの実装ではありませんが、実際には、最小限のサンプルます。
あなたが正しい軌道に乗っているように、続けるようです。
最後に、あなたは、主に非常に便利なコードを生成していないので、あなたがより密接にあなたの条件に一致する他のコードジェネレータやツールやフレームワークに見てみたいことがありますコードジェネレータとしてEntity Frameworkのを使用しています。