代码抽象层次2
看了kent的实现模式,对代码抽象层次有了一点理解,kent首先问了一个问题,下面的代码有神马问题?
void compute() { int flag = input(); flag |= 1; output(flag); }
粗看来没有,但其实不然,但其实,input和output已经是高层抽象了,例如你并不知道输入来自于何方,到底是键盘输入呢,还是文件输入,又或者是网络输入,同样output也是如此,但是中间设置flag的语句则是一个低层抽象,如果整个函数都是低层抽象,代码应该是这样:
void compute() { extern char *s; int flag = 0; scanf("%d",&flag); flag |= 1; switch(flag) { case 1: fprintf(logHandler,"%s\n",s) case 2: send(serverSocket,s,length(s),0); } }
反之,如果函数是一个高层抽象的函数,代码应该是这样:
void compute() { int flag = input(); setFlag(&flag); output(flag); }
更进一步的,如果flag的位1在业务逻辑的意义是保存到日志里,那么代码应该是这样的:
void compute() { int flag = input(); ensureSaveToLog(&flag); //保证一定会保存到日志 output(flag); }
将高层逻辑和低层逻辑剥离的最大好处时,高层逻辑不用管低层逻辑是怎么实现的,即所谓的解耦,低层逻辑从键盘读也好,从文件读也好,那是低层逻辑的事情,而且低层逻辑改变实现,这事对于高层逻辑也是透明的
疑问:
1)层次不应该太多,层次太多则小函数太多,未必好
2)不同层次的函数放在什么地方,这是个架构问题?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2012-09-22 测试:mock对象