node.js项目结构中数据访问层和服务有什么区别

我刚刚开始学习 node.js、express 和 mongoose。在一些教程中,我看到一些项目结构,比如它们有不同的控制器文件夹,不同的服务,不同的数据访问层。

现在我的问题是服务和数据访问层文件有什么区别,我们在那里保留什么?我们将数据访问层文件保存在我的项目结构中的什么位置?

控制器和路由的任务究竟是什么?

回答

路线的文件,在那里你将应用程序的端点。这些将指您定义的特定应用程序方法。这称为路由。

app.post('/users', userController);

为了澄清起见,在上面的示例中,我们为/users路由调用了 POST HTTP 方法并将请求重定向到该userController方法。

所述控制器层是更具体的。他负责解析 HTTP 请求数据并发送到服务层。
例如:

  async function userController(request, response) {
    const { name, age } = request.body;

    const serviceRequestBody = { name, age };

    const serviceResponse = await userService(serviceRequestBody);

    return response.json(serviceResponse);
}

服务层通常是您放置项目规则(域特定规则)。例如:根据用户年龄计算出生年份

async function createUserService(userData) {
   const birthYear = new Date().getFullYear() - userData.age;

   const userFormatedData = {...userData, birthYear }; // the three dots means that we're getting all the information inside userData and placing it inside the new variable.

   const dbResult = await userRepository(userFormatedData);

   return dbResult;
}

数据访问层(也可称为“库”)负责获取,发布,更新或删除从数据库中的信息。

async function userRepository(userInfo) {
     const dbResult = await db.post(userInfo);

     return dbResult;
}

对于项目结构,更多取决于您。我喜欢这样构建我的项目:

-src
  |-modules
  |     | -user // domain specific entities. If you have other entities, they will be inside another folder with the same structure as this one
  |         |-domain
  |         |-controllers
  |         |-repositories
  |         |-routes
  |         |-services
  |-shared // can be used across any module
        |-utils
        |-providers
-package.json
-configFile.json

PS:随着您扩展应用程序,这些抽象可能会随着时间的推移而变化。工程师有责任根据他面临的情况找出更好的结构。

如果您想了解有关软件工程的更多信息,请搜索领域驱动设计(DDD),它是组成良好且可扩展的项目的一组架构规则。


以上是node.js项目结构中数据访问层和服务有什么区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>