私は3つのレイヤーでアプリケーションを設計しようとしています:
1) データアクセス層
2) ビジネス層
3) UI
私はクラスを分離したままにしようとしているので、ビジネス層では次のようなデータ アクセス クラスのインターフェイスを作成しました。
public interface ICountryRepository:IRepository
{
Country GetCountry(int ID);
int CreateCountry(Country obj);
Boolean UpdateCountry(Country obj);
Boolean DeleteCountry(Country obj);
...
...
}
そして、インターフェイスをパラメーターとしてサービス コンストラクターに渡します。
public CountryService(ICountryRepository repository,ILanguageRepository lang_repository)
{
....
}
ただし、たとえば CountryService では、現在のユーザーとそのアクセス許可を読み込む必要があるため、操作を適用できるかどうかを確認できます。
public Country GetCountry(int ID)
{
if securityService.UserHasPermission(currentUser, GetPermission("CanGetCountry"))
{
return repository.GetCountry(ID);
}
else
{
Throw(New SecurityException("No permissions for that operation ...."))
}
}
つまり、SecurityDataAccess オブジェクトをインスタンス化し、それをビジネス レイヤー アセンブリの SecurityService のコンストラクターに渡す必要があります。これは、オブジェクトの分離を維持するために避けようとしています。現在、ビジネス アセンブリの DataAccess アセンブリへの参照さえありません。
ここで IoC コンテナーを使用することを考えています。外部構成を使用して、構成ファイルから適切なクラス/アセンブリを取得できました。しかし、IoC コンテナーは物事をシンプルに保つために 1 か所で使用する必要があり、ほとんどの場合、最上位アセンブリ (UI アセンブリ) にする必要があると言われているため、それが正しい解決策であるかどうかはわかりません。
この問題を解決するための提案はありますか?