这不是一个有明确答案的问题,但我需要一些关于我的架构的建议。关于这个话题可能有很多不同的意见。
我正在尝试将我的架构从愚蠢的实体转移到丰富的领域对象。在我当前的版本中,我有抽象的域对象,它们具有代表业务逻辑的只读属性和方法:
abstract class Project
{
public string PropertyName { get; protected set; }
public void Setup(SetupData data)
{
...
Save();
}
protected abstract void Save();
}
我从它们派生来实现到持久性实体的映射并实现保存逻辑:
class MongoProject
{
MongoProject(ProjectDocument document, Action<ProjectDocument> save)
{
MapFrom(document);
}
public override Save()
{
MapTo(document);
save(document);
}
}
这很容易工作,该项目始终有效,因为它没有公共设置器并且可以测试,甚至与文档的映射。
但我也意识到了一些问题:
- 我总是忘记映射一些属性,没有办法告诉 MongoProject 它必须序列化什么。
- 有时实现映射相对复杂,因为您不知道 save 方法内部发生了哪些更改,尤其是在项目是复杂聚合根的情况下。在我的情况下,使用 mongodb 实现持久性非常容易,但对于实体框架来说却是一场噩梦。
您如何解决应用程序中的持久性问题以及映射问题是否有其他解决方案?