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