- 积分
- 11902
- 明经币
- 个
- 注册时间
- 2015-8-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 你有种再说一遍 于 2024-12-31 19:12 编辑
# 积极抛出错误
新人最喜欢犯的错是不知道:积极报错的可贵.
让程序挂掉比带病运行好,
因为病是持续到下一个病,然后不断有病,最后你要找到第一个病的时候,贼麻烦...
所以该终止时就终止.
例如大家一开始很喜欢: 如果是空对象,我就制造一个.
正确的是: 如果是空对象,我就报错.让调用者自己制造.
# 关注点分离
提炼类(Extract Class)的重构方法理念.
C#写多了之后总能发现,一些东西可以抽出来作为一个类,其实类有两个功能:数据和容器.
数据类,想必大家都知道怎么做,那么容器呢?
你会发现我博客"链式标注"以及其他文章上面经常会单独加一个"缓存类",其实这就是它的容器化.
当你把容器部分从原逻辑中抽出来,这样会发现原逻辑变得整洁干净.
例如: if(dimLink.Contains(dimInfo))
内部计算两个标注脚点是否一致,但是有一天你发现,这个功能存在效率问题,你就需要热路径优化了.
发现热点改为计算中点更快,并且还可以把中点存到"数据类",这样整个代码都修改幅度贼小,调用部分不用改,只需要改内部计算.
这样你不需要管这个Contains怎么计算的.
里面是O(1),二分法,遍历都好,外面阅读逻辑的时候就不需要关注细节,而你需要在意的时候才进入修改,这样使得主逻辑非常轻.
制作容器类时候,会发现里面其实写了更多代码...
什么双缓存字典,数组,有序性的升序/降序/插入序,保证搜索速度还是插入速度,是否并行...
因为容器类是通用的(我们叫它泛化),需要校验参数,各种方式保证流程的正确调用等等.
但是外面用的时候只需要记住Find/Contains/TryGetValue之类的方法.
嘻嘻. |
|