私は複雑なビジネスのプロジェクトに取り組んでいます。 AccountServiceとSchoolServiceの2つのクラスを考えてみましょう。Anemicドメインモデルを使用したサービス間の循環参照
私はUnityとWeb APIの依存関係リゾルバを使用してコンストラクタに依存性注入を実装しています。
学校のサービスでは、いくつかの方法でアカウントサービスが使用され、アカウントサービスも学校サービスが使用されます。このすべてがプロジェクトのビジネスに必要です。これは循環依存を引き起こし、あるクラスから別のクラスにメソッドを移動することはできません。
これを解決する方法を教えてください。ここ
は一例であり:
public class SchoolBLC : ISchoolBLC
{
public School GetSchool(int schoolId)
{
...
}
public bool RenewRegistration(int accountId)
{
bool result = true;
IAccountBLC accountBLC = new AccountBLC();
// check some properties related to the account to decide if the account can be renewed
// ex : the account should not be 5 years old
// check the account created date and do renewal
return result;
}
}
public class AccountBLC : IAccountBLC
{
public void ResetAccount(int accountId)
{
ISchoolBLC schoolBLC = new SchoolBLC();
School accountSchool = schoolBLC
// get the school related to the account to send a notification
// and tell the school that the user has reset his account
// reset account and call the school notification service
}
public Account GetAccount(int accountId)
{
...
}
}
2つのクラスがお互いを参照している、これは、プロジェクト内のBLCの70%のための状況です。
プロジェクトでこのような循環依存性の例を挙げることはできますか。 – user1849310
貧しいデザインのような音...私は3番目のサービスに共通のものを打ち破るだろう。それは循環依存を解決します。 DIエンジンは通常、循環参照で例外をスローします。 – SledgeHammer
@SledgeHammerその他のポイント。あなたはDIなしでも問題をどのように解決しますか? DIは魔法ではありません。もしあなたがそれなしではできないなら、あなたはそれを行うことができません。 – Aron