明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 252|回复: 1

[运行时] cad.net 关注点分离

  [复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2024-12-31 19:12 编辑

# 积极抛出错误
新人最喜欢犯的错是不知道:积极报错的可贵.
让程序挂掉比带病运行好,
因为病是持续到下一个病,然后不断有病,最后你要找到第一个病的时候,贼麻烦...
所以该终止时就终止.

例如大家一开始很喜欢: 如果是空对象,我就制造一个.
正确的是: 如果是空对象,我就报错.让调用者自己制造.

# 关注点分离
提炼类(Extract Class)的重构方法理念.

C#写多了之后总能发现,一些东西可以抽出来作为一个类,其实类有两个功能:数据和容器.

数据类,想必大家都知道怎么做,那么容器呢?
你会发现我博客"链式标注"以及其他文章上面经常会单独加一个"缓存类",其实这就是它的容器化.
当你把容器部分从原逻辑中抽出来,这样会发现原逻辑变得整洁干净.

例如: if(dimLink.Contains(dimInfo))
内部计算两个标注脚点是否一致,但是有一天你发现,这个功能存在效率问题,你就需要热路径优化了.
发现热点改为计算中点更快,并且还可以把中点存到"数据类",这样整个代码都修改幅度贼小,调用部分不用改,只需要改内部计算.

这样你不需要管这个Contains怎么计算的.
里面是O(1),二分法,遍历都好,外面阅读逻辑的时候就不需要关注细节,而你需要在意的时候才进入修改,这样使得主逻辑非常轻.

制作容器类时候,会发现里面其实写了更多代码...
什么双缓存字典,数组,有序性的升序/降序/插入序,保证搜索速度还是插入速度,是否并行...
因为容器类是通用的(我们叫它泛化),需要校验参数,各种方式保证流程的正确调用等等.
但是外面用的时候只需要记住Find/Contains/TryGetValue之类的方法.

嘻嘻.
回复

使用道具 举报

发表于 5 天前 | 显示全部楼层
是这样是这样,高楼万丈平地起,手敲代码心有底。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-5 16:29 , Processed in 0.155423 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表