在 RavenDb 中使用域模型作为文档?
我正在考虑使用我的域模型 (DDD) 作为 RavenDb 中的文档。这是一个坏主意吗?
如果没有,我正在使用包含 id 的 id 类(例如 TodoListId
)(在 ravens 的情况下 todolists/3
等)。我如何告诉 Raven/JSON.NET 使用它们作为 id?
public class TodoListId
{
public class TodoListId(string id)
{
//validate the id and set internal var
}
//override ToString to return the id
}
public class TodoList
{
public TodoList(TodoListId id)
{}
public TodoListId Id{get;set;}
public TodoListId Parent {get;set;}
public string SomeBasicProperty {get;set;}
}
另外,当我使用 nhibernate 时,我通常将所有设置器设置为受保护,以确保正确使用域模型。 RavenDb 客户端也可以这样做吗?或者序列化不起作用吗?
todoList.Id.ToString()
将返回 todolists/1
。
I'm thinking of using my domain models (DDD) as documents in RavenDb. Is that a bad idea?
If not, I'm using id classes (like TodoListId
) which contains the id (in ravens case todolists/3
etc). How can I tell Raven/JSON.NET to use them as the id?
public class TodoListId
{
public class TodoListId(string id)
{
//validate the id and set internal var
}
//override ToString to return the id
}
public class TodoList
{
public TodoList(TodoListId id)
{}
public TodoListId Id{get;set;}
public TodoListId Parent {get;set;}
public string SomeBasicProperty {get;set;}
}
Also, when I'm using nhibernate I usually set all setters to protected to make sure that the domain models are used properly. Is that possible with the RavenDb client too? Or wont serialization work then?
todoList.Id.ToString()
would return todolists/1
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
关于受保护的设置者,是的,这会起作用。
关于 TodoListId,您需要提供一个 ITypeConverter 实现并将其注册到 DocumentStore.Conventions.IdentityTypeConvertors 以使 RavenDB 理解如何在您的 Id 类型和 id 字符串之间进行转换。
Regarding the protected setters, yes, that will work.
Regarding the TodoListId, you need to provide an
ITypeConverter
implementation and register that with theDocumentStore.Conventions.IdentityTypeConvertors
to make RavenDB understand how to translate between your Id type and the id string.