假设我们有以下对象代表错误跟踪系统中的一个任务:
Task
- id: ObjectId
- status: TaskStatus
- history: []Action
ActionLog
- timestamp: int
- author: string
- transition_from: TaskStatus
- transition_to: TaskStatus
TaskStatus是一个枚举:(open | in_progress | resolved | closed)
。
我们将实现REST端点以更改任务状态。它应该:
考虑到我使用MongoDB和golang,应该如何实现呢?我想使代码易于维护和测试。 有人可以推荐一些开源项目吗?我能找到的所有教程都集中在基础知识上,看起来并不像现实生活中的例子。
我能够自行确定两种截然不同的方法:
1。直接修改数据库
将修改映射到适当的MongoDb命令。那就是:
摘要:
2。类似于DDD的方式
将setStatus方法添加到Task类,该方法将处理所有必要的事情(状态验证,添加操作日志条目等)。 Hovewer,这需要首先从db获取对象,在内存中对其进行修改,然后保留新版本(替换旧版本)。为了处理并发问题,可以使用乐观锁定。我的问题是,如何将对象保存回数据库?我可以只是“倾销”所有字段并创建一个大的更新,还是会过大?我是否应该搜索某种可以跟踪更改的ODM,以便仅发送差异文件?
摘要:
任何建议将不胜感激。预先谢谢你!