• 不再害羞,过程比结果更重要;分享一套 CodeSmit 代码生成模板。


        住博客园 5 年了,以前也发过一些博文,但都在 一天后 / 几周后 / 几年后 将它删了;因为感觉代码写得不好:不清晰或侵入太大,哪怕只有一句侵入。

        可是最近重写一套 CodeSmith 代码生成模板的时候,发现自己编码能力长进不少:有能力删除大量代码了。删除得很顺利,即使不舍;看上去这是个好事,可也是个坏事:现已难以回忆起当初为什么删这些代码、更回忆不起来最初为什么加这些代码。

        这些决策信息的丢失真是让人痛心疾首。

        接下来,我要实现一个好玩的东西:维护对象在内存中的引用一致性。这一次,我可不想让那些左右决策的依据不翼而飞了;她们很珍贵:那是我的思路。

        另外介绍一下上期成果吧,其实就是发个广告啦:

        很多人、包括直到前不久离职的我,都在进行着 基于数据库且数据库优先 的简单应用开发。所幸的是大家都使用着相同的实现模式:Entity -(IDal、Dal)- Bll。
    于是,我要写一套 CodeSmith 模板,让有缘人看到、使用 或 修改。

        包括这套,一共编写了三套 CodeSmith 模板;
    第一套实现了基本的可用功能,第二套添加了自认为有亮点的功能,这次重构并删除了那些自认为有亮点的功能;
    所以也留下了一些心结:

    1. 枚举类型的字段。虽然可让代码强类型、可读性强,但使用字段注释和类型转换也可弥补。
    2. 视图中的唯一键。这个关系到分页性能,不过如果最多只返回 Top 500 之类的则也没啥差别。
    3. TransactionScope。SqlServer 2000 时需要启动 MsDtc 服务且影响性能,不过 SqlServer 2005 以上就不需要了。
      • 说明

        如果使用 CodeSmith 5.0,则在 CodeSmith 的 Template Explorer 的工具栏中点击第一个按钮(Create Template Folder Shortcut)指向 DatabaseBasedCodeGenerator 文件夹。

        打开 Main.cst,编译后在 Properties 设定必填属性就可运行 Main.cst 了,运行后会生成完整的解决方案。

        是否能编译则还要看你的数据库元素的命名是否重复。

        生成的主要是数据访问的实现:


        其中 Filter 和 Condition 是为了让查询条件强类型而引入的。

        Condition 弥补了 Filter 中条件只能与的缺陷。

        所以,Condition 蕴含的 Sql 是依靠数据库元数据生成的,因为使用 CodeSmith,所以参考了其 SchemaExplorer 命名空间中类的命名:

        下载点这里

  • 相关阅读:
    php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
    手机web——自适应网页设计(html/css控制)
    js正则表达式语法
    禁止鼠标右键的代码(转)
    php获取文件名称和扩展名
    php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
    js中cookie的使用详细分析
    fopen中r+和w+的区别
    左右选择框 js插件
    SpringMVC 过滤器Filter使用解析
  • 原文地址:https://www.cnblogs.com/JimHappy/p/3151973.html
Copyright © 2020-2023  润新知