用typecript中的node.js中的倒置清洁架构:代码驱动指南
#typescript #node #express #cleanrchitecture

Clean Architecture in Node.js

介绍

随着Node.js应用程序的复杂性增长,保持良好的且可扩展的代码库变得至关重要。 Clean Architecture是一种软件设计方法,可促进应用程序不同层之间的关注点和分离。在本文中,我们将探讨如何使用iNversify(一个强大的依赖性注入容器)在Node.js中实现干净的体系结构,以及Inversify-Express-Utils构建Web API。到最后,您将为在Node.js中开发可维护和可测试应用的稳固基础。

了解干净的体系结构

干净体系结构的关键思想是将应用程序分为多层,每个应用程序都具有特定的责任,并且对其他层的依赖性最小。干净体系结构的核心层是:

  1. 实体:代表业务领域模型,封装了应用程序的业务规则和状态。

  2. 用例:包含特定应用程序的业务逻辑。它代表了应用程序的主要用例或交互。

  3. 接口适配器:此层将用例中的数据转换为适合外部接口(例如Web API或数据库)的格式。

  4. 框架和驱动程序:包含应用程序中使用的外部接口和工具的实现,例如Web框架,数据库等。

在node.js中使用倒置

倒置是在Node.js应用程序中实现依赖注入(DI)的流行库。它使我们能够管理依赖项并在组件之间实现松散的耦合。在开始之前,请确保已安装了Node.js和NPM。

步骤1:设置项目

创建一个新的node.js项目并初始化npm:

mkdir clean-architecture-demo
cd clean-architecture-demo
npm init -y

步骤2:安装依赖项

安装必要的依赖项 - 倒置,反式express-utils和express:

npm install inversify inversify-express-utils express reflect-metadata
npm install @types/express --save-dev

步骤3:配置打字稿

我们将在此示例中使用打字稿。在项目的根部创建一个tsconfig.json文件:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist",
    "strict": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

步骤4:实施干净的体系结构

让我们开始实现干净的体系结构:

  1. 实体:

创建一个名为“实体”的文件夹并添加文件用户。ts:

// entities/User.ts
export class User {
  constructor(public id: number, public name: string, public email: string) {}
}
  1. 用例:

创建一个名为usecases的文件夹并添加一个文件userusecase.ts:

// useCases/UserUseCase.ts
import { injectable } from "inversify";
import { User } from "../entities/User";

@injectable()
export class UserUseCase {
  getUsers(): User[] {
    // Simulated data for demonstration purposes
    return [
      new User(1, "John Doe", "john@example.com"),
      new User(2, "Jane Smith", "jane@example.com"),
    ];
  }
}
  1. 接口适配器:

创建一个名为Controller的文件夹并添加文件USerController.ts:

// controllers/UserController.ts
import { Request, Response } from "express";
import { controller, httpGet } from "inversify-express-utils";
import { UserUseCase } from "../useCases/UserUseCase";
import { inject } from "inversify";

@controller("/users")
export class UserController {
  constructor(@inject(UserUseCase) private userUseCase: UserUseCase) {}

  @httpGet("/")
  async getUsers(_: Request, res: Response) {
    const users = this.userUseCase.getUsers();
    return res.json(users);
  }
}

步骤5:设置倒置容器

创建一个名为inversify.config.ts的文件:

// inversify.config.ts
import { Container } from "inversify";
import { UserController } from "./controllers/UserController";
import { UserUseCase } from "./useCases/UserUseCase";

const container = new Container();
container.bind<UserController>(UserController).toSelf();
container.bind<UserUseCase>(UserUseCase).toSelf();

export default container;

步骤6:创建Express服务器

创建一个名为app.ts的文件:

// app.ts
import "reflect-metadata";
import { InversifyExpressServer } from "inversify-express-utils";
import container from "./inversify.config";

const server = new InversifyExpressServer(container);

server.build().listen(3000, () => {
  console.log("Server started on http://localhost:3000");
});

结论

在本文中,我们探讨了如何使用iNversify和倒置express-utils在node.js中实现清洁体系结构。通过遵守清洁体系结构的原理,我们实现了易于测试和扩展的可扩展和可维护的代码库。使用倒置为依赖性注入容器,使我们能够有效地管理依赖关系并促进组件之间的松散耦合。

请记住,这是一个简化的示例,现实世界应用程序可能具有更复杂的用例和域实体。但是,清洁建筑和倒置的基本原理保持不变,为构建强大的node.js应用程序提供了坚实的基础。

这是一个示例项目存储库的链接,以更具体地演示本文中讨论的概念:Sample Clean Architecture with Inversify Repository.