“反转,总是反转。” –Carl Jacobi,经 Charlie Munger 转述
优先使用 if 语句而非多态
每当你想要创建一个类时,问问自己:“这可以用一个 if 语句来代替吗?”
在 grug 导向编程中,封闭–封闭原则 (CCP) 规定“软件实体(类、模块、函数等)应该对扩展封闭,但也应该对修改封闭”
它们应该只是做一些有用的事情,伙计
最小化抽象原则 (MAP) 是一个计算机编程原则,它规定“一个模块应该
最小化其包含的抽象数量,无论是在 API 还是在实现中。停止自省, nerd。”
“尝试替代”原则规定,你应该尝试一些东西,如果它不起作用,就思考为什么,然后用其他东西替代它。
通常需要替代多个东西,最终才能找到正确的东西。
有用东西原则规定,实体必须依赖于有用东西,而不是过于抽象的废话。它规定高层模块可以依赖于低层模块,因为这就是软件的工作方式。
“依赖的存在不是摧毁代码库的借口”原则规定,依赖的存在不是摧毁代码库的借口
考虑给你的开发者一个抽象预算
当他们耗尽预算并要求更多时,告诉他们,当他们移除一个现有抽象时,就可以获得另一个抽象
当他们抱怨时,寻找类名中带有 “Factory”、 “Lookup” 或 “Visitor” 术语的类
如果你的函数只在一个地方被调用,考虑内联它并减少模块中的总方法签名数量,以帮助人们更好地理解它
研究表明,更长的函数每行代码的 bug 更少,因此优先选择更长的函数而非许多较小的函数
考虑创建 “God” 对象,将大量功能包装在一个单一包中
你的 API 的消费者不想学习 50 个不同的类来完成某事,所以给他们提供几个类,这些类以最小的麻烦提供模块的核心功能
复制&粘贴驱动开发是一种开发方法论,其中,当你需要以略微不同的方式重用一些代码时,你复制&粘贴代码,然后修改它以满足新要求
这与设计一个精致的对象模型形成对比,例如
实现驱动开发是一种开发方法论,其中你首先探索你想法的各种实现,以确定最佳实现,然后为其添加测试
在没有一些实现代码来驱动该测试的情况下,不得编写任何测试代码
混合关注点是一种设计方法论,其中各种类型的“关注点”被混合到一个单一代码单元中。这通过将所有相关逻辑置于其中来改善该代码单元的局部性。超媒体就是一个例子,它混合了控制和呈现信息。
宏服务架构围绕“宏服务”展开:网络部署的代码模块,为整体系统提供大量功能
通过采用基于宏服务的架构,你可以最小化部署复杂性并最大化资源利用率
昨晚有点躁狂发作,我的错