【发布时间】:2017-02-03 14:48:48
【问题描述】:
在我的项目中,我尝试从 DAO 中分离域模型,例如 https://vaughnvernon.co/?p=879 中的示例。我使用它的类,我的域对象的后端状态是内部的并且仅在存储库中使用。接下来我有我的域对象,我想通用一些使用它的逻辑。有一个代码:
public abstract class GenericEntity<T> where T : class
{
protected readonly T _state;
internal GenericEntity(T state)
{
_state = state;
}
internal T State
{
get
{
return _state;
}
}
}
我想从这个类派生,但我的域模型应该是公共的,我不能这样做,因为内部 DAOEntity。
public class DomainModel : GenericEntity<DAOEntity>
{
}
internal class DAOEntity
{
}
是不是有些绕来绕去的?或者我需要实现这个代码来管理我所有班级的状态。我不想做一些基本的 DAOEntity 原因然后我需要在所有域模型中强制转换它。
编辑: 也许你不明白我的问题。现在我的代码看起来像 Marcos Jonatan Suriani 在他的回答中展示的:
public class Product
{
public Product()
{
State = new ProductState();
}
internal Product(ProductState state)
{
State = state;
}
}
public class ProductState
{
}
public class AgilePMContext : DbContext
{
public DbSet<ProductState> Products { get; set; }
}
但是我正在寻找一些设计模式,我可以通过我的内部状态实现减少复制粘贴代码,所以我想使用这个解决方案,因为当我有很多域模型时,这是我需要重复的代码总而言之。
【问题讨论】:
-
我没有看到关于 GenericEntity 的问题。只需将 DAOEntity 类公开...只要将 State 保持在内部,就不会泄露责任。
-
这是一些解决方案,但是在您建议的这种方法中,库的用户可以查看状态是如何得到支持的,我想避免它。