我试图找出一个好的和干净的方法,让我的域模型访问在创建新实体对象时在我的数据库中定义的默认值。假设我正在使用 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();
}
我的问题是,我在正确的轨道上吗?可以通过域服务访问默认值吗?