当代码Testability和Readability冲突时选择哪个?
选择Testability.
原因: Readability带有很大的主观性, 不同的读者从不同的视角看一段代码是不一样的. 而Testability则客观很多.
信息隐藏原则
写代码不是把所有东西都隐藏就是好代码. 比如:
CreditCard card = new CreditCard(10000);
card.Charge(5000);
这样的代码看似简单, 其实隐藏了很多依赖, 比如数据库等. 使用者根本不知道如何使用.
什么应该隐藏, 而什么不应该隐藏?
应该像药品说明书一样, 用法, 疗效, 副作用都应该很清楚.
应该隐藏的: 代码的逻辑 if...else..., for... 之类
要暴露的: 依赖, 输入, 输出, 异常