8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

控制器、服务和存储库是否可以仅由针对 Api 的静态方法组成?

Junjie Zhu - MSFT 2月前

17 0

我正在使用 Typescript 的 ExpressJS 创建 API,我的项目架构如下(“->”表示“调用”):Route -> Controller -> Service -> RepositoryI'm

我正在使用 Typescript 的 ExpressJS 创建 API,我的项目架构如下(“->”表示“调用”):

路由 -> 控制器 -> 服务 -> 存储库

我想知道将控制器、服务和存储库设为静态是否对我的项目来说是一种好的做法,让我给你一个代码示例。

路线.ts:

import { Router} from 'express';
import  MyController from '../Controllers/MyController'

const router = Router();
router.get('/api-route', MyController.getData);

export default router;

我的控制器.ts:

import { Request, Response } from 'express';
import  MyController from '../Controllers/MyController'

export default class MyController {
    
    public static async getData(request: Request, response: Response) {
        const body: any = request.body;

        // Do request validation... (e.g. Validate JWT)

        let data: Data | undefined = await MyService.getData(body["secret-code"]);   

        if (!data)
            return response.status(403).json("Wrong secret code!");

        return response.status(200).json(data);
    }
}

我的服务.ts

export default class MyService {
    
    public static async getData(secretCode: string): Data | undefined {

        if (secretCode !== "TheSecret")
            return undefined;    

        return await MyRepository.getData();
    }
}

我的存储库.ts

export default class MyRepository {
    
    public static async getData(): Data {
        
        // This is pseudo code to get data from database.
        return await Database.Connect(EnvVariableConnectionString).Get("data");
    }
}

考虑到这段代码中我不需要实例化任何对象

出于安全性和并发性目的,该代码是否有效?为什么?例如,如果两个用户同时调用 API,并且响应取决于用户的 ID,那么静态方法在安全性/并发性方面是否存在问题?

如果我不应该使用静态方法,那么我应该在哪里实例化控制器、服务和存储库?

帖子版权声明 1、本帖标题:控制器、服务和存储库是否可以仅由针对 Api 的静态方法组成?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Junjie Zhu - MSFT在本站《typescript》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 如果要将所有内容都编写为静态方法,那为什么要使用类呢?另外,我不明白拆分路由器和控制器有什么意义 - 它们都是传输层(并且都不应进行单元测试)。

  • @jonrsharpe 不介意这些类,我想知道对 Api 使用静态函数/方法是否是一种好的做法。对于 Router-Controller,我希望一些路由使用不同的控制器。

返回
作者最近主题: