找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3665

积分

0

好友

503

主题
发表于 昨天 06:57 | 查看: 3| 回复: 0

在软件开发中,将代码合理地组织成不同的模块,每个模块专注于特定的功能,是构建健壮应用的核心。这种 分离关注点 的做法,能够显著提升代码的可维护性、可测试性与可扩展性,让你能更轻松地理解和管理整个代码库。

好的代码示例

下面是一个遵循分离关注点原则的 Node.js 应用结构示例。它将用户获取请求的处理逻辑清晰地分为了控制器、服务和数据访问三个层次。

首先是控制器 (userController.js),它只负责处理 HTTP 请求和响应:

// userController.js
const userService = require('./userService');

const getUser = async (req, res) => {
  try {
    const user = await userService.getUserById(req.params.id);
    res.status(200).json(user);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

module.exports = { getUser };

接下来是服务层 (userService.js),它包含业务逻辑。这里它调用了数据访问层:

// userService.js
const userRepository = require('./userRepository');

const getUserById = async (id) => {
  return await userRepository.findById(id);
};

module.exports = { getUserById };

最后是数据访问层 (userRepository.js),它封装了所有与数据库交互的细节:

// userRepository.js
const db = require('./db');

const findById = async (id) => {
  return await db.query('SELECT * FROM users WHERE id = ?', [id]);
};

module.exports = { findById };

在这个示例中,职责被清晰地划分:控制器处理协议,服务层处理业务逻辑,仓库层处理数据持久化。每个模块都承担着单一的职责,这使得代码更易于单独测试、维护和复用。

糟糕的代码示例

作为对比,我们来看一个不符合 软件工程原则 的反面案例。在下面这个糟糕的示例中,所有的逻辑都被堆积在了控制器里:

// userController.js
const db = require('./db');

const getUser = async (req, res) => {
  try {
    const user = await db.query('SELECT * FROM users WHERE id = ?', [req.params.id]);
    res.status(200).json(user);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

module.exports = { getUser };

这里,控制器直接与数据库交互,混合了路由处理、业务逻辑和数据访问等多个关注点。随着功能增加,这个文件会迅速膨胀,变得难以阅读、测试和修改。任何一个部分的改动都可能影响到其他不相关的部分,维护成本极高。

写在最后

分离关注点(Separation of Concerns)是 软件工程 中的一个基础且重要的原则,它常被视作单一职责原则(SRP)的体现,同时也是 SOLID原则 的重要组成部分。通过上面正反两个 Node.js 代码示例的对比,你应该能直观地感受到遵循这一原则带来的好处。

在实际开发中,有意识地采用分层、分模块的设计,是迈向高质量代码的关键一步。如果你想了解更多关于架构设计或代码优化的实践,欢迎来 云栈社区Node.js 板块与其他开发者一起交流探讨。




上一篇:深入OpenClaw:从零部署你的AI“小龙虾”助理
下一篇:Ubuntu用户创建与管理新手教程:终端与图形界面详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-3 00:06 , Processed in 0.484941 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表