数据抽象 Data Abstraction
隐藏实现 并非 只是在变量之间放上一个函数层那么简单,隐藏实现 关乎 抽象
类不能简单地通过 Setter 和 Getter 把变量暴露出去,而应该暴露抽象接口,以便用户无需了解数据的的实现就能操作数据本体
如果把变量设为 private,然后通过 Setter 和 Getter 暴露,这跟设为 public 有什么区别
举两个例子:
1 | public class Point { |
隐藏实现 并非 只是在变量之间放上一个函数层那么简单,隐藏实现 关乎 抽象
类不能简单地通过 Setter 和 Getter 把变量暴露出去,而应该暴露抽象接口,以便用户无需了解数据的的实现就能操作数据本体
如果把变量设为 private,然后通过 Setter 和 Getter 暴露,这跟设为 public 有什么区别
举两个例子:
1 | public class Point { |
代码格式关乎沟通,而沟通是专业开发者的头等大事
每个空白行都是一条线索,表示出新的独立概念
关系密切的概念应该互相靠近
变量声明:应尽可能靠近其使用位置
实体变量:应在类的顶部声明(Java)或 底部声明(C++, 剪刀原则),团队遵循相同规范即可
注释是用代码表达意图遭遇的失败
写注释的常见动机之一是糟糕的代码的存在
清晰的代码本身就能有效表达意图,应避免依赖注释
确实存在代码难以解释逻辑的情况。不幸的是,许多程序员因此认为代码几乎无法成为好的解释手段,这是错误的观点。如
1 | // check to see if the employee is eligible for full benefits |
可以重构为:
1 | if (employee.IsEligibleForFullBenefits()) |
很多时候,简单到只需要创建一个描述了与注释所言同一事物的函数即可。
IQueryable 是继承 IEnumerable 的,所以任何使用 IEnumerable 的地方都可以换成 IQueryable. —– 里氏替换
.net - What is the difference between IQueryable