介绍
随着Node.js应用程序的复杂性增长,保持良好的且可扩展的代码库变得至关重要。 Clean Architecture是一种软件设计方法,可促进应用程序不同层之间的关注点和分离。在本文中,我们将探讨如何使用iNversify(一个强大的依赖性注入容器)在Node.js中实现干净的体系结构,以及Inversify-Express-Utils构建Web API。到最后,您将为在Node.js中开发可维护和可测试应用的稳固基础。
了解干净的体系结构
干净体系结构的关键思想是将应用程序分为多层,每个应用程序都具有特定的责任,并且对其他层的依赖性最小。干净体系结构的核心层是:
-
实体:代表业务领域模型,封装了应用程序的业务规则和状态。
-
用例:包含特定应用程序的业务逻辑。它代表了应用程序的主要用例或交互。
-
接口适配器:此层将用例中的数据转换为适合外部接口(例如Web API或数据库)的格式。
-
框架和驱动程序:包含应用程序中使用的外部接口和工具的实现,例如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:实施干净的体系结构
让我们开始实现干净的体系结构:
- 实体:
创建一个名为“实体”的文件夹并添加文件用户。ts:
// entities/User.ts
export class User {
constructor(public id: number, public name: string, public email: string) {}
}
- 用例:
创建一个名为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"),
];
}
}
- 接口适配器:
创建一个名为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.