是否有关于如何在NestJS中描述和组织模块的最佳实践?
假设有两个实体:是否有关于如何在NestJS中描述和组织模块的最佳实践?,nestjs,organization,code-organization,project-organization,Nestjs,Organization,Code Organization,Project Organization,假设有两个实体:Cat和Photo。每张照片可以有一只猫,但每张猫有很多照片。用户应能够创建、阅读、更新和删除猫和猫的照片。因此,我为以下端点提供了GET、POST、PUT和DELETE方法 /cat /cat/:id /cat/:id/photo /cat/:id/photo/:id 我对如何组织代码感到困惑。我看到了不同的模块化选项 选项1:将所有东西都扔到cat模块内 └── cat ├── cat.controller.ts ├── cat.entity.ts
Cat
和Photo
。每张照片可以有一只猫,但每张猫有很多照片。用户应能够创建、阅读、更新和删除猫和猫的照片。因此,我为以下端点提供了GET、POST、PUT和DELETE方法
/cat
/cat/:id
/cat/:id/photo
/cat/:id/photo/:id
我对如何组织代码感到困惑。我看到了不同的模块化选项
选项1:将所有东西都扔到cat模块内
└── cat
├── cat.controller.ts
├── cat.entity.ts
├── cat.module.ts
├── cat.service.ts
├── photo.entity.ts
└── photo.service.ts
如果一只猫有很多关系,那么控制器就会变得不成比例。如果其他实体以后可以有照片,这也会给我带来麻烦
选项2:将所有内容放在单独的模块中,并相应地导入
└── cat
├── cat.controller.ts
├── cat.entity.ts
├── cat.module.ts
└── cat.service.ts
└── photo
├── photo.module.ts
├── photo.entity.ts
└── photo.service.ts
如果每个实体都有一个模块,并且任何模块都必须从另一个模块导入任何相关的实体,那么这种做法就违背了清晰分离模块的目的,并最终导致一个大泥球
选项3:将照片模块嵌套在cat模块内
└── cat
├── cat.controller.ts
├── cat.entity.ts
├── cat.module.ts
├── cat.service.ts
└── photo
├── photo.module.ts
├── photo.entity.ts
└── photo.service.ts
如果其他实体以后可以有照片,这仍然会给我带来麻烦
我觉得NestJS模块的树结构和实体关系的图形结构之间存在固有的不匹配。也许我在如何处理这个问题上做出了错误的假设或持有错误的心态
关于如何描述和关联NestJS模块,有什么最佳实践吗?模块通常需要额外的努力才能做出这样的决定。 在你的例子中,照片可以应用于其他一些东西,比如用户、帖子等,所以它必须分开 尝试遵循以下简单规则:
有时会这样想:如果我将这些作为一个独立的微服务,可以帮助我做出正确的决定,那该怎么办呢。模块通常会增加额外的工作来做出这样的决定。 在你的例子中,照片可以应用于其他一些东西,比如用户、帖子等,所以它必须分开 尝试遵循以下简单规则: