【发布时间】:2015-11-25 04:28:06
【问题描述】:
我想知道为我的项目设计域对象的最佳方式是什么。
领域对象应该不了解 ORM/Framework 甚至数据库技术(MySQL、MSSQL 甚至 Mongo)
想到下一个问题,假设我有两个对象,Post 和 Comment。
这是 Post 对象的代码:
class Post {
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public IList<Comment> Comments { get; set; }
}
现在,我对 Comment 对象的问题是它应该包含 Post Id 还是仅包含 Post 对象?
class Comment {
public int Id { get; set; }
public string Content { get; set; }
public Post Post { get; set; }
public int PostId { get; set; } // Should i include it?
}
包含关系对象的 Id 还是仅包含其域对象是一种好习惯?
另一个问题是没有像 mongodb 这样的 sql 数据库。 如果我将数据存储在 mongodb 中,Comment 对象将引用什么 Post 对象? 在 mongodb 中,post 和 cmets 之间没有关系,任何 post 都包含 cmets 列表,但 cmets 本身并不知道它们所属的 post。 那么,让这些领域类同时兼容基于 Sql 的数据库和 NoSql 数据库的最佳方法是什么?
谢谢
【问题讨论】:
-
您想在设计中使用 DDD 吗?您添加了 DDD 标签,但问题似乎与 DDD 无关。请澄清。
-
在 SO 上的一个问题中尽量避免这么多问题。您问题的第一部分(ID / 关系)与第二部分(mongoDB)无关,所以如果您提出多个单独的问题会更好。
-
@theDmi 那是个错误,我试图找到域对象的标签...我知道这些问题可能看起来不相关,但是这两个问题都围绕着什么是设计的最佳实践我的域对象。
-
“如果是好的做法吗?”,很抱歉告诉你这一点,但欢迎使用 NoSQL,因此最适合你的就是最好的,而不是要遵循的标准。另一方面,如果您尝试做一些可以很好地映射到关系和更多文档/对象存储域的事情,那么祝您好运,但至少从关系的角度来看,您可能需要在两端进行映射。什么是“良好实践”是做最适合您的应用程序的事情。理想情况下,您的对象应该与存储分离,但整个主题有点过于宽泛。
标签: mongodb oop relational-database non-relational-database database