新しいエンティティオブジェクトの作成時にデータベースで定義されたデフォルト値にドメインモデルがアクセスできるようにするための、適切でクリーンな方法を見つけようとしています。FacebookConnectを使用して自分のWebサイトの新しいユーザーを作成しているとします。Facebookユーザーに国が設定されているかどうかわからないため、新しいエンティティを作成するときにデフォルトの国にアクセスする必要があります。
これまでのところ、GetDefaultCountry()という単一のメソッドを使用してドメインサービスを作成しました。おそらくもっと多くのことが来るでしょう。
ISettingsService.cs(ドメインサービス):
public interface ISettingsService
{
Country GetDefaultCountry();
}
設定サービスはインフラストラクチャ層に実装されており、UnitOfWorkからアクセスできます。次に、設定サービスを引数として取るファクトリを作成しました。これは、ユーザーエンティティの作成を担当します。
UserFactory.cs(ドメインファクトリ):
public class UserFactory
{
private ISettingsService _settings;
public UserFactory(ISettingsService settings)
{
_settings = settings;
}
public User CreateFacebookUser(string facebookUserId)
{
var user = new User();
user.AccountType = AccountType.Facebook;
user.ExternalId = facebookUserId;
user.Country = _settings.GetDefaultCountry();
user.Timestamp = DateTime.Now;
return user;
}
}
そして、これは私のユーザーサービスがどのように見えるかです。
UserService.cs(アプリケーションサービス):
using (var uow = new UnitOfWork())
{
UserFactory factory = new UserFactory(uow.GetSettingsService());
var user = factory.CreateFacebookUser(facebookUserId);
...
uow.Save(user);
uow.SubmitChanges();
}
私の質問は、私は正しい方向に進んでいるのかということです。ドメインサービスを介してデフォルトにアクセスしても大丈夫ですか?