私は開発の選択肢として NTiers の大ファンです。もちろん、すべてのシナリオに適合するわけではありません。
私は現在、新しいプロジェクトに取り組んでおり、通常の作業方法を試して、それをクリーンアップできるかどうかを確認しようとしています。私はとても悪い子で、プレゼンテーション レイヤーにコードを入れすぎていました。
私の通常のビジネス層構造はこれです(基本的な見方):
- 仕事
- サービス
- FooComponent
- フーヘルパーズ
- Fooワークフロー
- BahComponent
- バーヘルパーズ
- Bahワークフロー
- FooComponent
- ユーティリティ
- 一般
- ExceptionHandlers
- 輸入業者
- 等...
- サービス
上記により、それぞれのヘルパーを介して Foo オブジェクトと Bah オブジェクトを直接保存するための優れたアクセスが得られます。
XXXHelpers を使用すると、それぞれのオブジェクトを保存、編集、およびロードできますが、オブジェクトを子オブジェクトと共に保存するロジックはどこに配置すればよいでしょうか。
例えば:
以下のオブジェクトがあります(私が知っているオブジェクトはあまり良くありません)
- 従業員
- 従業員の詳細
- 社員会員
- 社員紹介
現在、私はこれらすべてをプレゼンテーション層で構築してからヘルパーに渡しますが、これは間違っていると思います。データは、ビジネス層のプレゼンテーションの上の単一のポイントに渡され、そこで整理されるべきだと思います。
しかし、このロジックをどこに配置し、セクターを何と呼ぶかについて、私は少し途方に暮れています。それは、EmployeeManager またはこのようなものとしてユーティリティの下に移動しますか?
あなたならどうしますか?私はこれがすべて好みであることを知っています。
より詳細なレイアウト
ワークフローには、DataRepository への直接のすべての呼び出しが含まれています。次に例を示します。
public ObjectNameGetById(Guid id)
{
return DataRepository.ObjectNameProvider.GetById(id);
}
次に、ヘルパー プロバイダーがワークフローにアクセスします。
public ObjectName GetById(Guid id)
{
return loadWorkflow.GetById(id);
}
これは重複するコードを削減するためです。ワークフローで getBySomeProperty を 1 回呼び出してから、他の操作を実行してさまざまな方法でデータを返すことができるヘルパーで複数の呼び出しを行うことができるためです。悪い例は public GetByIdAsc と GetByIdDesc です。
DataRepository を使用してデータ モデルへの呼び出しを分離することで、モデルを別のインスタンスに交換することが可能になるということですが (そう考えていました)、ProviderHelper は分解されていないため、そのままでは交換できません。残念ながらEFにハードコードされています。アクセス テクノロジーを変更するつもりはありませんが、将来的には、代わりに実装したいと思うかもしれない、より優れたもの、またはすべてのクールな子供たちが現在使用しているものがあるかもしれません。
プロジェクト名.Core
projectName.Business
- Interfaces
- IDeleteWorkflows.cs
- ILoadWorkflows.cs
- ISaveWorkflows.cs
- IServiceHelper.cs
- IServiceViewHelper.cs
- Services
- ObjectNameComponent
- Helpers
- ObjectNameHelper.cs
- Workflows
- DeleteObjectNameWorkflow.cs
- LoadObjectNameWorkflow.cs
- SaveObjectNameWorkflow.cs
- Utilities
- Common
- SettingsManager.cs
- JavascriptManager.cs
- XmlHelper.cs
- others...
- ExceptionHandlers
- ExceptionManager.cs
- ExceptionManagerFactory.cs
- ExceptionNotifier.cs
projectName.Data
- Bases
- ObjectNameProviderBase.cs
- Helpers
- ProviderHelper.cs
- Interfaces
- IProviderBase.cs
- DataRepository.cs
projectName.Data.Model
- Database.edmx
projectName.Entities (Entities that represent the DB tables are created by EF in .Data.Model, this is for others that I may need that are not related to the database)
- Helpers
- EnumHelper.cs
プロジェクト名.プレゼンテーション
(アプリケーションの呼び出しが何であるかによって異なります)
projectName.web
projectName.mvc
projectName.admin
テスト プロジェクト
projectName.Business.Tests
projectName.Data.Test