node.js 项目结构中的数据访问层和服务有什么区别
what is difference between Data Access layer and service in node.js project structure
我刚刚开始学习 node.js、express 和 mongoose。
在一些教程中,我看到一些项目结构,比如它们有不同的控制器文件夹、不同的服务文件夹、不同的数据访问层文件夹。
现在我的问题是服务和数据访问层文件有什么区别,我们在那里保存什么?在我的项目结构中,我们在哪里保存数据访问层文件?
还有controller和routes的任务到底是什么?
routes 文件是您放置应用程序端点的地方。这些将引用您定义的特定应用程序方法。这叫做routing.
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);
}
服务层 通常是放置项目规则的地方 (domain specific rules)。 例如:根据用户年龄计算出生年份.
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;
}
数据访问层(也可以称为“存储库”)负责getting, posting, updating or deleting来自数据库的信息。
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:随着您扩展应用程序,这些抽象可能会随着时间的推移而变化。根据他所面临的情况找出更好的结构是工程师的责任。
如果您想了解有关软件工程的更多信息,请搜索 Domain Driven Design (DDD),这是构成良好且可扩展项目的体系结构规则集。
我刚刚开始学习 node.js、express 和 mongoose。 在一些教程中,我看到一些项目结构,比如它们有不同的控制器文件夹、不同的服务文件夹、不同的数据访问层文件夹。
现在我的问题是服务和数据访问层文件有什么区别,我们在那里保存什么?在我的项目结构中,我们在哪里保存数据访问层文件?
还有controller和routes的任务到底是什么?
routes 文件是您放置应用程序端点的地方。这些将引用您定义的特定应用程序方法。这叫做routing.
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);
}
服务层 通常是放置项目规则的地方 (domain specific rules)。 例如:根据用户年龄计算出生年份.
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;
}
数据访问层(也可以称为“存储库”)负责getting, posting, updating or deleting来自数据库的信息。
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:随着您扩展应用程序,这些抽象可能会随着时间的推移而变化。根据他所面临的情况找出更好的结构是工程师的责任。
如果您想了解有关软件工程的更多信息,请搜索 Domain Driven Design (DDD),这是构成良好且可扩展项目的体系结构规则集。