最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何实现noSQL数据库抽象?

IT培训 admin 8浏览 0评论

如何实现noSQL数据库抽象?

我使用CouchDB,一个面向文档的数据库,将数据存储为JSON文档。我在后端使用Javascript,所以我可以直接存储JS对象。目前,我在CouchDB和我的域层中存储的模型之间有直接映射。我认为这不是一件好事,因为我完全依赖这个数据库。

我有2个实体用户和项目。一个用户可以拥有多个项目,这些模型在数据库中表示为单独的文档:

用户文档

{
  "_id": "1",
  "entity": "user"
}

项目文件 该关系由属性user_id引用。

{
  "_id": "2",
  "entity": "project",
  "user_id": "1",
  "name": "project1"
}

// other project document
{
  "_id": "3",
  "entity": "project",
  "user_id": "1",
  "name": "project2"
}

我的问题是: 我应该在图层之间保持这种方便的映射,还是应该创建一个抽象层,将模型从数据库转换为域对象?

更方便的用户域对象的示例:

// _id property is replaced by id
// entity property is removed
// projects relations stand in a projects array
{
  id: "1",
  projects: [
   { id: "2", name: "project1"},
   { id: "2", name: "project1"}
  ]
}

注意:我想阅读Eric Evans的“Domain Driven Design”一书。也许它可以帮助我看到如何管理这样的模型抽象。

回答如下:

我认为这个问题涉及很多DDD。 你在努力争取的是聚合。使用nosql db,文档应包含聚合。 对同一聚合中的实体使用不同的文档将具有以下效果:聚合持久化对应于存储的多个文档,这可能会独立失败(导致数据损坏)。 相反,DDD聚合是域的事务边界,聚合的持久性必须是原子操作。

关于技术的东西,如果取决于从域模型删除它们很好是干净等...等... 但是,如果留下它们导致更多问题,那么找到一种方法将它们隐藏在域中。所以它取决于域的规模。

有关更多信息,这可能会有所帮助:Why limit commands and events to one aggregate? CQRS + ES + DDD

如何实现noSQL数据库抽象?

我使用CouchDB,一个面向文档的数据库,将数据存储为JSON文档。我在后端使用Javascript,所以我可以直接存储JS对象。目前,我在CouchDB和我的域层中存储的模型之间有直接映射。我认为这不是一件好事,因为我完全依赖这个数据库。

我有2个实体用户和项目。一个用户可以拥有多个项目,这些模型在数据库中表示为单独的文档:

用户文档

{
  "_id": "1",
  "entity": "user"
}

项目文件 该关系由属性user_id引用。

{
  "_id": "2",
  "entity": "project",
  "user_id": "1",
  "name": "project1"
}

// other project document
{
  "_id": "3",
  "entity": "project",
  "user_id": "1",
  "name": "project2"
}

我的问题是: 我应该在图层之间保持这种方便的映射,还是应该创建一个抽象层,将模型从数据库转换为域对象?

更方便的用户域对象的示例:

// _id property is replaced by id
// entity property is removed
// projects relations stand in a projects array
{
  id: "1",
  projects: [
   { id: "2", name: "project1"},
   { id: "2", name: "project1"}
  ]
}

注意:我想阅读Eric Evans的“Domain Driven Design”一书。也许它可以帮助我看到如何管理这样的模型抽象。

回答如下:

我认为这个问题涉及很多DDD。 你在努力争取的是聚合。使用nosql db,文档应包含聚合。 对同一聚合中的实体使用不同的文档将具有以下效果:聚合持久化对应于存储的多个文档,这可能会独立失败(导致数据损坏)。 相反,DDD聚合是域的事务边界,聚合的持久性必须是原子操作。

关于技术的东西,如果取决于从域模型删除它们很好是干净等...等... 但是,如果留下它们导致更多问题,那么找到一种方法将它们隐藏在域中。所以它取决于域的规模。

有关更多信息,这可能会有所帮助:Why limit commands and events to one aggregate? CQRS + ES + DDD

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论