Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有关于如何在NestJS中描述和组织模块的最佳实践?_Nestjs_Organization_Code Organization_Project Organization - Fatal编程技术网

是否有关于如何在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模块,有什么最佳实践吗?

模块通常需要额外的努力才能做出这样的决定。 在你的例子中,照片可以应用于其他一些东西,比如用户、帖子等,所以它必须分开

尝试遵循以下简单规则:

  • 如果一个模块是另一个功能的一部分?如果是这样的话,它可能是其中的一部分
  • 示例:发布和发布评论。您可能不需要将post注释作为单独的模块

  • 如果是通用功能/模块?如果是这样,则应将其定义为独立模块
  • 示例:可以添加到用户和帖子中的帖子、用户和评论

  • 更简单的一点是:假设一个模块是全局的?那么它必须是独立的
  • 示例:事件


    有时会这样想:如果我将这些作为一个独立的微服务,可以帮助我做出正确的决定,那该怎么办呢。

    模块通常会增加额外的工作来做出这样的决定。 在你的例子中,照片可以应用于其他一些东西,比如用户、帖子等,所以它必须分开

    尝试遵循以下简单规则:

  • 如果一个模块是另一个功能的一部分?如果是这样的话,它可能是其中的一部分
  • 示例:发布和发布评论。您可能不需要将post注释作为单独的模块

  • 如果是通用功能/模块?如果是这样,则应将其定义为独立模块
  • 示例:可以添加到用户和帖子中的帖子、用户和评论

  • 更简单的一点是:假设一个模块是全局的?那么它必须是独立的
  • 示例:事件

    有时会这样想:如果我将这些作为一个独立的微服务可以帮助我做出正确的决定