让你加个按钮。你他妈搞了一个可配置的组件工厂,带插件系统、 主题支持、还有事件总线。
没人他妈要这些玩意。
这个功能需求20行代码就能搞定。你写了2000行,因为你这个傻逼忍不住 要"把它做对"。你没做对。你做复杂了。现在每个碰你代码的人 都要为你的架构自嗨买单。
这不是工程。这是脑残的自我满足配个键盘。
"万一以后要扩展呢?"
扩展你妈。你不知道以后要什么。没人知道。你不是在预测未来——你是在 扮演一个能预测未来的傻逼。而90%的情况下, 那个"未来需求"永远不会来。那是你用来给过度复杂化现在 找的狗屁借口。
YAGNI(你他妈不会需要它)不是建议。是物理定律。你不会需要它。 就算你真的需要,等你真有需求的时候,你会更清楚它长什么样—— 而不是在真空里瞎几把猜的时候。
你为想象中的需求写的代码,比不写还他妈糟。那是错误的代码, 现在还得维护、理解、绕着走。
过度设计到底要付出什么他妈的代价:
你没有节省未来的时间。你在透支它,还要付利息,傻逼。
任务:在列表里显示用户名。
你这个脑残搞了什么:
DataRenderer 基类ListRendererUserListRendererRenderStrategy 接口用于可替换渲染UserNameRenderStrategy 实现你他妈实际需要的:
users.map(user => <li>{user.name}</li>)
完了。整个需求就这样。一行。
你的八层抽象没有让它变好。让它他妈的没法维护了。当有人需要改名字的 显示方式时,他们现在得追踪五个文件,而不是改一行。
过度设计的代码库不会扩展。它们会他妈的石化。每个抽象都变成承重墙。 每个"灵活"的系统都变成一座没人能修改的刚性监狱,动一下就 塌别的地方。
最快、最好维护的代码库是无聊的。是显而易见的。是做最简单的事。 当它们需要做更多的时候,才加入最少的必要复杂度——一秒都不会 他妈的提前。
你想知道资深开发者干什么吗?他们删代码。他们简化。他们反对 不必要的复杂度。他们见过太多"聪明"的架构被自己的重量压垮。
最好的代码是你他妈不写的代码。
在你加那个脑残抽象层之前,问自己:
如果你不能对第一个和第三个问题回答"是",你就在他妈的过度设计。 停下来。写那个傻瓜式的简单版本。交付。继续干下一个。
用户不在乎你的架构。他们在乎功能能不能用。你的队友不崇拜 你的抽象。他们晚上11点调试的时候在骂你这个傻逼。
操他妈的别过度设计。