【发布时间】:2020-02-28 17:06:15
【问题描述】:
像 MongoDb 这样的文档数据库让您可以通过属性属性直接使用您的业务对象,如下所示。
public class Book
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("Name")]
public string BookName { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
public string Author { get; set; }
}
这里的 [BsonId] 属性指定了一个 MongoDb 主键。尽管它可以作为一种灵活性,但它非常特定于 MongoDb。现在 Book 类也变得依赖于 MongoDb 库。由于不同的项目(.net 中的项目、Java 中的包等)使用上述 Book 类,它们也变得依赖于 MongoDb 库,这反过来又打破了项目之间的松散耦合。
鉴于背景,是否值得创建一个相同的映射类来避免依赖关系(或使用 Automapper https://automapper.org 或 http://dozer.sourceforge.net/ 等 Java 工具)?
是否值得额外的管道与违反子系统松散耦合原则和单一责任原则?
【问题讨论】:
-
使用value object(如
BookId)作为图书ID 将消除Book类对特定底层持久层的依赖。
标签: mongodb oop design-patterns architecture domain-driven-design