当我以为把所有东西都写在一个文件中是明智之举时

27 阅读3分钟

我内心的初级开发者 当我开始担任初级开发人员时,我看到我的资深队友写了那么多文件......只是为了将用户保存到数据库中。🤯

有一个UserDTO、一个UserService、一个UserRepository、一些接口,甚至还有一个仅用于例外的文件夹。

我盯着这个结构思考:

“这不是太过分了吗?我一个文件里只用 10 行代码就能搞定。干嘛弄得这么复杂?”

所以我就是这么做的。

💻 我的“单文件英雄”时刻 // saveUser.js const express = require("express"); const app = express(); const mongoose = require("mongoose"); app.use(express.json());

mongoose.connect("mongodb://localhost:27017/test");

app.post("/user", async (req, res) => { const { name, email } = req.body; const User = mongoose.model("User", new mongoose.Schema({ name: String, email: String })); await User.create({ name, email }); res.send("User created"); });

app.listen(3000); 成功了。✅ 我感到很自豪。我部署了它。我睡得很好。😌

🧨然后现实打击 几周后:

客户想要验证该电子邮件。 然后他们想添加一个电话号码。 然后他们想存储用户的角色。 每次小更新都意味着:

翻遍我的一个大文件,把所有东西都改了😫

我曾经不小心断开了数据库连接。 忘记验证输入一次。 它变成了一个容易出现错误的混乱局面。 那时我终于明白了为什么老年人会用那么多文件。 这不是矫枉过正——而是出于可靠性。

📐 什么是 SOLID 原则? SOLID 是一组 5 条设计原则,有助于编写干净、可维护和可扩展的代码:

原则 简单词语的含义 S - 单一职责 一个类/文件/函数应该只做一件事 O——打开/关闭 代码应该对扩展开放,但对修改关闭 L - 利斯科夫换人 子类的行为应该像它们的基类 I-接口隔离 不要强迫组件依赖它们不使用的东西 D - 依赖倒置 依赖于抽象,而不是具体的实现 🛠️ 之前 vs 之后(真实代码示例) ❌ 糟糕(一团糟)

www.mytiesarongs.com/app.post("/user", async (req, res) => { const User = mongoose.model("User", new mongoose.Schema({ name: String })); await User.create({ name: req.body.name }); res.send("User created"); }); 无需验证 路线中的直接 DB 代码 难以测试 不可重复使用 ✅ 好(SOLID 方式 – 分解成几个部分) 📁 routes/userRoute.js

router.post("/", userController.createUser); 📁 控制器/userController.js

export const createUser = async (req, res) => { const dto = new CreateUserDTO(req.body); const user = await userService.create(dto); res.send(user); }; 📁 services/userService.js

export const create = async (dto) => { validateUser(dto); return userRepository.save(dto); }; 📁 repositories/userRepository.js

export const save = async ({ name }) => { const User = mongoose.model("User", new mongoose.Schema({ name })); return await User.create({ name }); }; 现在每个文件都有一项作业,我可以:

✅ 轻松测试每个部分 ✅ 在其他地方重用 userService ✅ 无需触碰控制器即可更改 DB 逻辑 ✅ 无需担心扩展应用程序 🍔 现实生活中的类比 假设你经营一家汉堡店:

一个人接受订单 另一个厨师 一包 一个交付 现在想象一下,如果一个人做所有事情——他们会把事情搞砸。

💡 就像在代码中一样,分离职责可以使事情更快、更干净、更少错误。

🧠 我学到的最后一课 仅仅因为你的代码可以运行并不意味着它是好的。但如果它是模块化的、可测试的和可靠的,你以后会感谢你自己。

我曾经以为“一个文件就很聪明”。 现在我知道了:“聪明就是编写可维护的代码。”

💬 那你呢? 您是否曾经编写过一个文件怪物并随后为其付费?

请在评论区留言告诉我——让我们一起规范化从混乱的代码中学习!以上内容由企业信息服务平台提供,致力于工商信用信息查询、企业风险识别、经营数据分析。访问官网了解更多:www.ysdslt.com