前面我有一篇随笔重复,为什么我们要不断重复讲述的是我在项目开发中的苦恼,引发了很多人讨论,大家各出高招,有人提到ORM,按我的愚见,ORM是在应用程序的类和数据库中表及视图建立一对一关系,例如,数据库中有表tblarticle,那么与之对应,我们可以建立一个articleItem对象来表示单条的记录,表的每个字段做为articleItem的成员变量,对应表的insert,update,delete以及select item及select all等存储过程,我们可以为articleitem建立对应的方法,然后在方法中用ADO.NET及对应的存储过程来完成数据的抽取,修改等.并且,我们可以在articleitem的基础上建立articleitemcollection以表示多条记录,这样,就将单条记录的更新变成了建立一个articleitem对象,给article对象的各种属性赋值,最后调用像articleitem,update()这样的方法来完成数据操纵的目的.这种实现方式其实很容易令人接受,并且,如果A负责写数据存取层的话,B用的时候,几乎不用关心是在操纵哪个表,而只关心操纵的是何种对象.非常类似我们使用.NET类库中对象一样.

可是,听起来不错,但如果真的要你去用ORM做一个项目的时候,你会发现代码量远远大于使用"传统"的直接用ADO.NET调用存储过程的方法.虽然使用ORM可以让我们项目在以后的维护中更加容易,可是,在项目的初期,真的会拖慢开发速度,所以,很多博客堂的朋友觉得,与其ORM,不如就用ADO.NET来

可是,ADO.NET直接操作首先带来的问题是,你的项目只能模向分隔(比如,你可以把为一个数据库中某几个表写数据存取层的任务交给A,另外的交给B),无法进行纵向层次的分割,如果用ORM,你可以让A负责写数据存取层,让B写对象层,让C写业务逻辑层,协作上容易的多.

既然传统方法和ORM都不是那么完美.那有没有更好的方法呢?虽然我也听说过"银弹"故事.我也相信世界上没有银弹.但是我仍然孜孜不倦的追求完美,仍然想找到合适的解决方案.

CodeSmith这个软件在博客堂和CSDN不知道有多少人提过了.大多数的解释是CODeSmith是一个快速代码生成工具.试用后,CodeSmith给我了强烈的震撼,假如它只是一个基于模板的代码生成工具.那么我不认为有什么了不起.可是它竟然克服了模板生成工具的灵活性不足缺陷.它在高效率和高定制性间取得了完美的平衡.如果你没有用过他,我可以告诉你他有以下特点:

1.他可以用于生成C#,VB.NET,TSQL以及其他任何语言代码
2.他本身是可以编程的(这是他的灵活性之源)
3.他提供了强大的SchemaExplorer对象,使数据库储过程的生成非常容易
4.有了他,你不会再向我一样埋怨从一个项目到另一个项目时,需要重新写许多代码.因为你只需要一套模板而已
5.他使用的语法是典型的ASP.NET语法,并且,可以像我们写ASP那样将代码和静态内容混和撰写(好像在写ASP的时代一样)

举一个简单的例子,你就可以明白他的强大
下面是我根据Quick Start Guide写的一个模板,作用是生成一个简单的类框架,不要小看他呀

<%@ CodeTemplate Language="C#" TargetLanguage="C#"  Debug="False" Description="Simple CodeSmith Project" %>
<%@ Property Name="Developer" Type="System.String" Category="Context" Description="开发者名称" %>
<%@ Property Name="NameSpace" Type="System.String" Category="Context" Description="名字空间" %>
<%@ Property Name="ClassName" Type="System.String" Category="Context" Description="类名" %>
/**////
//文件名:<%=ClassName%>.cs
//说明:一个简单的类架构生成器
//版权所有 @ <%=DateTime.Now.Year%>  客户名称
//历史更新
//        <%=DateTime.Now%>        <%=Developer%>    零版本
/**////
using System;
namespace <%=NameSpace%>
{

    /**////<summary>    
    ///测试类
    ///</summary>
    public class <%=ClassName%>
    {
    
        /**////<summary>
        ///构造器
        ///</summary>
        public <%=ClassName%>()
        {
        }
        
        ~<%=ClassName%>
        {
        
        }
        
    }
    
}

这段模板生成的C#代码如下

/**////
//文件名:MyClass.cs
//说明:一个简单的类架构生成器
//版权所有 @ 2005  客户名称
//历史更新
//        2005-5-19 17:39:13 上午        Heroman    零版本
/**////
using System;
namespace FunSoft
{

    /**////<summary>    
    ///测试类
    ///</summary>
    public class MyClass
    {
    
        /**////<summary>
        ///构造器
        ///</summary>
        public MyClass()

转载于:https://www.cnblogs.com/Heroman/archive/2005/05/19/159086.html

来自CodeSmith的震撼相关推荐

  1. 伯伯2008年终总结[ 旅游 | 电影 | 文章 | C# | Javascript | CSS ]

    言      瞅见别人写年终总结我也心痒痒了,想想今年还是收获不少的,下面和大家分享一下吧 :  ) ------------------------------------------------- ...

  2. Sybase Anywhere 11 元数据[SQL Schema]

    前言 近两天的工作是将以前项目的Sybase Anywhere 11数据库表结构以及数据导出到Sqlite上,起初想法是通过PowerDesigner来做反向工程然后再导出.装工具找资料折腾老半天,一 ...

  3. 记住:用户不是傻*,她是你的老婆大人

    写在前面的话 这篇是我欠@夏然鼓励师的,刚好有空,就补上了.原文出自Medium,是一篇将用户参与感和用户留存,孰重孰轻的好文.原文链接附在这里,英文不错的咖友们,我建议你们看原文,说实话,我只是简单 ...

  4. C# 连接远程MySql出错,显示表不存在 [ C# | MySql | Table 'TABLENAME' doesn't exist ]

    前言 好久不写文章了,一直忙着换工作和项目结尾,这次帮朋友做点C#连接Mysql的程序,碰到了点问题,这里分享一下. 正文 1. 问题情况 SQL语句: select PURVIEW from USE ...

  5. World Cup——世界杯的另类读法

    9月10日的凌晨,当34岁的法兰西球魂齐达内黯然下场后不久,亚平宁半岛的王子们开始庆祝他们阔别了24年的大力神杯.而世界杯史上保持对意大利28年不败记录的法国,却在这一刻被命运捉弄.经历了小组赛的如履 ...

  6. #推书#——《那些回不去的年少时光》

    最初,是11月7号,那天在榜姐的话题下,评论了一个网友的评论,然后,被她安利了这部作品.然后,我一听名字,就猜是青春文学.说实话,这种作品,已经看的有点麻木不仁了.所以,当时也没多想.就让它死在评论里 ...

  7. 读《平凡的世界》感想(一)

    读<平凡的世界>感想(一) "平凡的世界"是一本经典的书,一直想看,最近终于开始品读这部巨著."平凡的世 界"是路遥文集中份量最重的一部长篇,全景式 ...

  8. 程序员团队名称和口号_【工会活动】“强身健体营造温馨团队,心手相牵构建和谐校园” ——记赛罕区民族小学团队拓展活动...

    梦 想 更 进 一 步 绿意萌动中寒风乍临,但料峭的春风丝毫未减民小人如火的热情.为激发全体教师"团结.互助.竞争"的团队意识,增进教师之间的沟通交流,增强团队凝聚力,促进我校文明 ...

  9. 武汉坚守第十七天——坚守中的感激

    1.纪念,仍然是纪念 2.来自日本的感动 3.来自欧洲的震撼 4.56万个口罩 今天仍然是在催促56万个口罩的事情,时间越来越短,越来越无奈. 如果不是最开始的4天多的时间的耽误,不可能这样. 昨天最 ...

  10. 爱,是一本斑斓的画册

    爱,是一种温暖,一种心痛,一种真实的生命.爱,是一条偏僻的小路,总能通达心灵的深处:爱,是一本斑斓的画册,总有刻骨铭心的风景:爱,是一朵馨香的兰花,总在风雨中静默绽放.爱,不是一种表达而是一种感受:爱 ...

最新文章

  1. python 统计分析apache日志_python分析apache访问日志脚本分享
  2. 重温强化学习之无模型学习方法:TD(lambda)
  3. 南方日报专访 | 网易云信沈青松: 企业上云正热,PaaS将迎来爆发
  4. Node.js+Express+MongoDB 实现学生增删改查
  5. 一些不错的C++网站[秋镇菜]
  6. sql/c#十六进制与十进制的转换
  7. D/A转换器(华师)
  8. 三顺,因为你,我笑了。
  9. 如何进行多语言发布,做国际化开发
  10. uartz Spring与Spring Task总结
  11. 怎样让vSAN发挥出高性能、低延迟的威力?
  12. 编码的奥秘:字节与十六进制
  13. IntelliJ IDEA入门教程:如何使用工具窗口
  14. 安装Ubuntu详细教程
  15. 关于php网络爬虫phpspider
  16. 求字符串长度的函数的几种实现方法
  17. could not resolve property: qid of: org.lxh.myzngt.vo.Answer [SELECT COUNT(q.qid) FROM org.lxh.myzn
  18. 解密“互联网流量”生意本质
  19. 车联网大规模商用关键突破口深度调研车路协同智慧高速全国建设情况
  20. Python读取图片内容并进行修改

热门文章

  1. T32 simulator
  2. 汇编——Masm使用及程序结构
  3. Python常用第三方库大全, 值得收藏!
  4. 经常手误怎么办?Delete键旁边是电源键
  5. Magento(CE1.X)自带模块解析五
  6. 在网上买衣服如何测量自己衣服尺码?
  7. 一道关于压缩包的ctf题目(包括暴力破解,明文攻击,伪加密)
  8. 什么是IMS(IP多媒体子系统)
  9. 在经历了6个月的学习后,我终于上架了自己的第一款APP---酷课堂iOS群问答精华整理(201807...
  10. 【JZOJ3337】wyl8899的TLE