我正在尝试在现有项目中使用Sequelize和 Typescript 来实现存储库和工作单元模式,遵循域驱动设计。然而,由于互联网上缺乏相关示例,我遇到了一些困难。
让我们考虑以下代码示例。
interface IPostRepo {
save(post: Post): Promise<void>;
}
interface ICommentRepo {
save(comment: Comment): Promise<void>;
saveBulk(comments: Comment[]): Promise<void>;
}
class SequelizePostRepo implements IPostRepo {
private models: any;
private commentRepo: ICommentRepo;
constructor(models: any, commentRepo: ICommentRepo) {
this.models = models;
this.commentRepo = commentRepo;
}
public async save(post: Post): Promise<void> {
const PostModel = this.models.Post;
const rawSequelizePost = await PostMap.toPersistence(post);
await PostModel.create(rawSequelizePost);
await this.commentRepo.saveBulk(comments);
}
}
class SequelizeCommentRepo implements ICommentRepo {
private models: any;
constructor(models: …Run Code Online (Sandbox Code Playgroud) domain-driven-design unit-of-work repository-pattern sequelize.js typescript
我在执行以下操作时正在使用MySQL数据库:
models.modelA.findAll({
attributes: [
['modelA.id','id']
],
raw: true,
include:
[
{
model: models.modelB,
required: true
}
]
}).then(function (tenants) {
});
Run Code Online (Sandbox Code Playgroud)
尽管如此,我仅选择id,Sequelize也在从相关表中检索所有属性,所以我得到了{ id,...这里的所有属性}。
我该如何预防?有时我只想选择2/3列,而Sequelize总是选择所有这些列,但效率不高。
我正在使用 Node.js 和 Express 框架开发应用程序。我发现了很多使用 MongoDB 建模数据的例子,但我的项目需要 SQL 数据库。
有人可以简单解释一下,基于MySQL制作模型的最佳方法是什么?
我也想知道如何提供这些模型的后期验证。也许我应该在每个属性中定义验证属性?
我刚刚开始我的领域驱动设计职业之旅。我的课程模型有问题。下面是一个简化的类图。
我有两个有界上下文:Population和Issues。
Person是用至少一个文档创建的。Person可以报告新的Issue附加多个IssueAttachment。
我想将文件存储集中为单个File实体,并将其保留在单个数据库表中。中心化的原因是在持久化之前执行常见操作,例如数据压缩或获取 md5 哈希。此外,将所有文件存储在单个表中还简化了测试数据转储过程,因为我必须忽略单个表来排除大量 blob。
然而,在阅读了很多文章之后,我可以得出结论,不建议在不同上下文之间共享实体。
您能给我一些关于如何处理此类问题的设计建议吗?
architecture entity-relationship domain-driven-design bounded-contexts
express ×2
model ×2
mysql ×2
sequelize.js ×2
architecture ×1
node.js ×1
select ×1
typescript ×1
unit-of-work ×1
validation ×1