首页 > 其他分享 >代码生成器实践总结

代码生成器实践总结

时间:2024-09-28 09:45:11浏览次数:5  
标签:总结 代码生成 razor 代码 实践 源码 替换 模板

最近,又用我的脚本管理,写了一个代码生成器。

用在一个.net core Web MVC项目中,想要把原来的一些Area,拷贝替换表名。

业务上来说是:把推广模块,单独复制出一个推广-外部渠道的模块。专门给公司外部的推广人员用,但是不影响原来的功能。

本质结构

  • 代码生成器 = 模板 + 替换

结论先写在上面了,下面是得到结论的过程。

  • 字符串拼接

我一开始,都是用的字符串拼接的方式。那代码就类似于:

var sb = new StringBuilder();

sb.ApendLine(@"......")。//可能是粘贴过来的代码。

sb.ApendLine(@"......")。//可能是个性的代码,不一样的地方。

sb.ApendLine(@"......")。//可能是粘贴过来的代码。

那些粘贴过来的代码,是从目前能运行的代码中复制来的,是相对不变的部分------也就是模板。

那些个性的代码,是变化的部分------也就是模板中要替换的东西。

  • 模板引擎

后来看着别人用模板引擎写,我也用模板引擎。

用过t4模板,后来又用了razor模板。

razor的语法,看起来很好,特殊的符号就是@,@{},直接@可以用C#中的变量,加花括号,可以写整段的C#代码。然后没有更多特殊的语法了。

而且razor是我们做一些web项目时,在.cshtml文件中用的语法;相对来说会更加熟悉。相比之下,t4好像有更多特殊语法,没有razor一把刀解决一切的感觉。

所以当时我很喜欢razor模板。

 贴一段razor写的winform的,关于单增删改查的,详情页的,前后置代码。

主要的就是要获取【实体类】的反射信息;可以看出【实体类名】经常会替换到生成的类的类名中去;而【字段信息】经常用来生成控件有关的代码。

在用模板引擎后,我更加确定了:代码生成器 = 模板 + 替换。

按上图来说,发黑的那些是相对固定的;@{}花括号里的代码,实现了对可变部分的替换。

  • 源码当模板

后来,我开始直接用可以运行的源码当模板了。

好处就是,模板可以单独调试。因为模板不是一直不变的,是有时会调整一下的。

如果用模板引擎,或者拼接的方式:就是在一份源码中调试好了以后,粘贴到模板里。然后运行一下生成,生成的代码,还要再运行一下,才知道有没有粘贴错误。

那我的模板,如果是直接可以运行的源码呢?我就可以单独先调试好模板了。

仍然是上面模板,.cshtml文件,改成.cs文件后,就是这样的。这是一个直接改成.cs文件的初级版本。

然后我可以查找类名替换,查找某些注释去替换。

而且是用我的脚本管理工具,写脚本来实现替换,生成文件的;这样很方便。

  • 代码片段的生成

从上面说的开始,方案就变成了简单纯粹的用脚本进行【文本处理】了。

文本处理,源文件可能是csv的,json的,html的;如果格式经常用到,我会把它当做模板或常用的,单独放一起。

以后遇到这种数据源的拷贝一个就行了 ,大多数时候,就是循环拼接的地方不一样;改一改文件路径,改一改循环拼接的地方,我就有了代码片段的生成器。

这在工作中,有时是很有用的。比如上面的模板,是一次工作中,需要把图片放到腾讯云的对象存储时用到的。

通过类似于上面的脚本可以很快找到这个页面用的大概100张照片,复制出来;批量替换src为对象存储的。

当然,这项工作的范围,超过代码生成器了。是文本处理比较多了。

上文写的内容,实际是我之前体会到的。

下文想写:关于可变部分------其实大多是表名,和字段名。

可变部分

可变内容的部分,大部分是根据表名和字段名来变化的。

以前感觉CodeFirst比较好,可以加各种标签之类的,标签可以帮助实现校验类的功能,好像很方便。好像也有种感觉,感觉CodeFirst更先进,DBFirst是老早就有的方式。

但是在实践的过程中,越来越发现,用表名是更为直觉式的方式。

因为用CodeFirst用实体类的类名的话,虽然有上面说的好处,但是会让注意力集中到功能上。

而DBFirst,先去弄清楚(表名,字段名,字段说明),会让注意力放在数据上。而且要弄清楚的内容比较少,注意力容易集中。

哪种思维方式更常用呢?实际是业务导向,注意力在数据变化上,比较常用。

不写代码的人,用户,也是在关注数据怎样;写代码的人,初次接手一个项目,也会点开界面,问熟悉系统的同事,这些都是什么业务,这些数字文本都是代表什么意思。

  • 暂时到这里

本来写这个,主要是想写这个大标题的。

但是,回忆了很多,之前的。

现在,写的烦了,不想写了。

等下次,大概再看到,让我想到这些事情的源码的时候;再写吧。

 

翻译

搜索

复制

标签:总结,代码生成,razor,代码,实践,源码,替换,模板
From: https://www.cnblogs.com/fabao/p/18436944

相关文章

  • 19 导入模块成员冲突 总结
    成员和冲突#如果导入的方法存在冲突时,进行取别名importdbasd1fromutils.dbimportdbasd2#也支持下面的方法导入fromutils.dbimportx1,x3,x3fromutils.dbimport*#此方式不推荐defrun():d1.f1()d1.f2()d2.xxx()if__name__=="__main__":......
  • 一次实践:给自己的手机摄像头进行相机标定
    目录1.问题引入2.准备工作2.1标定场2.2相机拍摄3.基本原理3.1成像原理3.2畸变校正4.标定解算4.1代码实现4.2详细解析4.2.1解算实现4.2.2提取点位4.3解算结果5.问题补充1.问题引入不得不说,现在的计算机视觉技术已经发展到足够成熟的阶段了,还记得笔者刚工作的时候,......
  • 2024csp初赛总结
    浙江27日下午1:30出分了,j组97,s组61.5,和估分一模一样,还好没有挂分。然后3点的时候上洛谷看了一下,全国分数线出了,j组89分,s组56分。那应该都过了,随后同学的成绩也出来了,sjx,yxs,tdq应该也都过了,皆大欢喜。以比赛日2024.09.21为DAY0.DAY-8(9.13)从常州回来了,到家已经挺晚的了,洗漱了一......
  • 【基础岛·第6关】OpenCompass 评测 InternLM-1.8B 实践
    目录1.概览2.环境配置2.1创建开发机和conda环境2.2安装——面向GPU的环境安装3.数据准备3.1评测数据集3.2InternLM和ceval相关的配置文件4.启动测评4.1使用命令行配置参数法进行评测4.2使用配置文件修改参数法进行评测1.概览在OpenCompass中评估一个模型通常包括......
  • 从响应到预见:前瞻性客户服务策略的实践与探索
    在快速变化的商业环境中,客户服务已不再是简单的需求响应与问题解决,它正逐步演变为企业竞争力的核心要素之一。传统的“响应式”服务模式虽能满足基本的客户需求,但在追求极致客户体验和构建长期忠诚度的今天,显然已显不足。因此,越来越多的企业开始转向“预见性”客户服务策略,通过......
  • Java中有哪些集合类?常用的几种java集合类总结 详细解读 Java 的集合类
    Java提供了丰富的数据结构选择,用以处理和存储对象,这些对象通过Java的集合类框架(JavaCollectionsFramework)来组织和管理。集合类使得开发者能够更加高效地处理数据,如排序、搜索、迭代等操作。本文将系统地介绍Java的集合类,包括其核心接口、常用实现类以及使用示例。......
  • 智能工厂的设计软件 设计目标:关乎对象的实践法则的认识论原则
    Q1、今天聊聊“智能工厂的设计软件”,本身作为“关乎对象的实践法则的认识论原则”提供给(告诉)“程序”,作为“程序”的指导原则。即:能将一阶抽象理论格和具体实践对象相结合的实践常识(共识)所依赖的认识论实体。可见:依赖的是认识论实体,根据的是实践对象,自已则作为一阶抽象理......
  • 关于VSCode里需要用的一些插件总结
    在使用vscode编辑器的时候,经常需要安装一些插件来帮助我们进行开发,现在对可能用到的一些插件进行总结1.openinbrowser-------------在浏览器中打开,如果不装这个,无法在右键的时候在浏览器运行(必备)2.AutoRenameTag--------------修改HTML标签时,自动修改匹配的标签3. Aut......
  • 【情感共鸣助手】智能体创建总结
    情感共鸣助手是一个专为情感支持和心理健康设计的智能体,旨在通过倾听、共情和反馈帮助用户更好地理解和管理自身的情绪状态。这个智能体的创建基于对情感健康日益重要的认识,旨在为用户提供一个温暖、无判断的情感陪伴者,帮助他们应对生活中的各种情绪波动和压力。在设计理念上,情感......
  • Foundry分叉测试实践
    主要是测试https://solidity-by-example.org/defi/uniswap-v2-add-remove-liquidity/中的这个例子,向UniswapV2的WETH/USDT流动性池添加或删除流动性。分叉测试方法使用foundry新建一个项目:forgeinitAddRemoveLiquidity合约源代码放在src目录,命名为UniswapV2Liquidity.sol,测......