【发布时间】:2011-08-10 07:23:21
【问题描述】:
我最近开始阅读 Evans 的领域驱动设计书,并开始了一个小型示例项目,以获取一些 DDD 经验。同时,我想了解更多关于 MongoDB 的信息,并开始用 MongoDB 和最新的官方 C# 驱动程序替换我的 SQL EF4 存储库。 现在这个问题是关于 MongoDB 映射的。我看到使用公共 getter 和 setter 映射简单对象非常容易——那里没有痛苦。但是我很难在没有公共设置器的情况下映射域实体。据我所知,构造有效实体的唯一真正干净的方法是将所需的参数传递给构造函数。考虑以下示例:
public class Transport : IEntity<Transport>
{
private readonly TransportID transportID;
private readonly PersonCapacity personCapacity;
public Transport(TransportID transportID,PersonCapacity personCapacity)
{
Validate.NotNull(personCapacity, "personCapacity is required");
Validate.NotNull(transportID, "transportID is required");
this.transportID = transportID;
this.personCapacity = personCapacity;
}
public virtual PersonCapacity PersonCapacity
{
get { return personCapacity; }
}
public virtual TransportID TransportID
{
get { return transportID; }
}
}
public class TransportID:IValueObject<TransportID>
{
private readonly string number;
#region Constr
public TransportID(string number)
{
Validate.NotNull(number);
this.number = number;
}
#endregion
public string IdString
{
get { return number; }
}
}
public class PersonCapacity:IValueObject<PersonCapacity>
{
private readonly int numberOfSeats;
#region Constr
public PersonCapacity(int numberOfSeats)
{
Validate.NotNull(numberOfSeats);
this.numberOfSeats = numberOfSeats;
}
#endregion
public int NumberOfSeats
{
get { return numberOfSeats; }
}
}
显然自动映射在这里不起作用。现在我可以通过BsonClassMaps 手动映射这三个类,它们将被很好地存储。问题是,当我想从数据库加载它们时,我必须将它们加载为BsonDocuments,并将它们解析到我的域对象中。我尝试了很多东西,但最终未能得到一个干净的解决方案。我真的必须为 MongoDB 生成带有公共 getter/setter 的 DTO,并将它们映射到我的域对象吗?也许有人可以给我一些建议。
【问题讨论】:
标签: c# mongodb domain-driven-design dto