我正在尝试将对象更改为Rich域模型。在尝试用富域模型替换它之前,我的原始类是这样的:
public class StudentLogic : IStudentLogic
{
private IUnitOfWork _uow;
private IStudentRepository _studentRepository;
public StudentLogic(IUnitOfWork uow,
IStudentRepository studentRepository)
{
_uow = uow;
_studentRepository = studentRepository;
}
public int CreateStudent(IStudent newStudent)
{
return _studentRepository.Create(newStudent);
}
}
将IStudent声明为:
public interface IStudent
{
string FirstName { get; set; }
string LastName { get; set; }
}
所以现在我尝试转换为Rich域模型。
如果没有FirstName和LastName,学生就不能存在,所以根据我读到的关于Rich域模型的内容,这应该包含在构造函数中。我对学生的丰富域名模型如下所示:
public class Student : IStudent
{
public Student(string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public int Create()
{
return _studentRepository.Create(this);
}
}
如何注入UoW和存储库?将它与firstName和lastName一起放在构造函数中似乎很尴尬。我遵循的模式一般是正确的吗?
答案 0 :(得分:2)
检查接口是否无法使用 我在编辑它的问题中解决了这个问题...... public
等辅助功能修饰符声明成员,并且无法定义字段,但属性,事件,方法......
另一方面,富域模型不会创建持久的域对象,代表整个创建的方法也不会返回一个整数,但创建的域对象。
关于依赖注入,在C#中,根据控件容器的反转,您可以使用构造函数依赖或属性依赖注入依赖项
使用构造时间依赖性的全部意义在于它们是强制性的。如果您的域对象无法在没有存储库和工作单元实现的情况下工作,那么您需要在域对象中要求它们。构造函数。否则,如果某些依赖项是可选,则可以使用属性注入注入它:
public class Some
{
// Mandatory, because a non-optional constructor parameter
// must be provided or C# compiler will cry
public Some(IUnitOfWork uow) { ... }
// Optional, because you may or may not set a property
public IRepository<...> Repo { get; set; }
}
最后,在施工时设置属性并不是域富的要求。使域模型不贫穷的原因是域对象不仅仅是数据存储,而是提供行为。