ASP.NET 5 / ASP.NET Core 1における懸念とn層アーキテクチャの分離

asp.net asp.net-core asp.net-core-mvc dependency-injection entity-framework-core

質問

私は、DALレイヤーをASP.NET 5のMVC / UIレイヤーと別に保つための優雅な方法を見つけるのに苦労しています。これは、新しく組み込まれたDependency Injectionを使用しています。

たとえば、ASP.NET 5プロジェクト、ビジネスレイヤープロジェクト、データアクセスプロジェクトがあり、エンティティやコンテキストなどのさまざまなEntity Frameworkコードがあります。 ASP.NET 5では、コンテキストを設定してデータベースをターゲットにするために、メインのドキュメントでは、StartUp.csクラスでこれを行うように提案しています

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<BookContext>(options =>
    {
        options.UseSqlServer(Configuration.Get("Data:ConnectionString"));
    });

これは、基本的に私のUIレイヤーであるDALを参照しなければならないことを意味しています。これは何年も前から、さまざまな専門家やブログの投稿に基づいて悪い練習を続けてきました。

私はこの問題を回避働いている一つの方法は、2つの新しいプロジェクトを作成することで、1は、持っている、ConfigurationクラスでもDALとユーティリティプロジェクトにアクセスする私のビジネスクラスを生成するファクトリクラスが含まれているCompositeRootプロジェクトでConnectionStringプロパティをどのI私のコンテキストに渡すことができます、私はすべてのワイヤーと私のUI層で私のDALの参照を避けるために内蔵のDIを使用します。しかし、コンテキストのコンストラクタやオーバーライドOnConfigurationメソッドのいずれかで接続文字列を指定することができないように見えるため、Entity Framework(Beta 7)の最新バージョンに関する問題が発生しました。さらに、これまでのすべての文書は、このような懸念が混在しているかどうかは気にしていないようです。これはちょうど今私たちがやることですか?開発者はUIの参照DALクラスのような「悪い」ことを直接行うことはないと信じていますか?または、この新しいDI /構成のASP.NET 5のために、人々がSOLIDを保つために採用しているパターンがありますか?

人気のある回答

あなたが橋を建設するために10人の土木建築家に依頼すれば、あなたは10の異なるアーキテクチャを持つことになります。誰も同じではなく、他の人よりも良い人はいません。

彼らが適用するベストプラクティスとデザインパターンの数にかかわらず、各アーキテクトは彼らの考えを正当化するでしょう。他の人はそれを単純に保ち、仕事を完了させる一方で、過度のものになるだろう。とりわけ、予算、納期、職人技は、あなたが決める建築の種類に直接的な影響を与えます。

同じルールがソフトウェアアーキテクトに適用されます。

UIレイヤーがDALに依存していることを認識するために、世界で最高の意図を持っている私の建築家の分かりました。おそらくこの背後にある理由は、

  • 彼らはそれを考えなかった
  • 彼らは本当に気にしない
  • それはDIを容易にします。なぜなら、各レイヤーを見ればインタフェースを実装に簡単にマッピングできるからです。

MVC 5に戻って、私は以下のレイヤーを持っていました:

-Contoso.Core (Class Library)
-Contoso.Data (Class Library)
-Contoso.Service (Class Library)
-Contoso.Web (asp.net MVC 5)
-Contoso.Web.Configuration (Class Library)

Web.Configurationレイヤーは、 CoreDataService依存していました。この層は私がDIのものを構成する場所です。

WebレイヤーはDataレイヤーに依存していなかったので、私はBootstrapper Nuget Packageを使用していました。

多分あなたはASP.NET 5と似た何かを達成することができます

デカップリングされたアプローチや、オニオンアーキテクチャのサンプルのようなものを使って、エンタープライズレベルのサンプルに合わせた作業用のプロジェクトテンプレートをMicrosoft(または他の人)が作成することが大好きです。

結局、私が合理的な分離アーキテクチャのように考えるものは、あまりにも多すぎるかもしれませんが、他のものには十分ではありません...

あなたの調査結果を分かち合って、自分がどのように機能しているかを知ることができれば、どうぞお気軽にご連絡ください。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ