我想弄清楚一個很好且乾淨的方式,以使我的域模型可以訪問在創建新實體對象時在我的數據庫中定義的默認值。可以說我正在使用Facebook Connect爲我的網站創建新用戶。我無法確定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();
}
我的問題是,我是在正確的軌道上?可以通過域名服務訪問默認值嗎?