反射已经"Out",动态编译才能"Hold"住

Net支持反射功能以后,确实使我们Net程序眼前一亮啊,真是太神奇了,只需要传入字符串就可以完成功能.可以说,反射功能的引入,使我们在处理某些问题上更加得心应手.

传统的Db管理软件中,数据库字段的频繁改动,前台实体类的不断修改,使我们大为头痛.并不是说我们设计的Db结构不合理,而且客户的需求变动十分频繁,而且非常不可控,当然,如果对行业业务非常精通的话,是可以避免这个问题的.

使用反射功能,虽然可以传入字符串来解决某些问题,但如果遇到上述提到的数据库字段增删的问题,我们常用的方法是写入给客户升级的SQL语句,然后在公司修改某个DLL文件中的实体类以后,重新编译,打包测试通过后.将前台DLL文件和后台SQL语句一并发至各户处,实施员或客户的系统管理员将最新的文件覆盖,SQL语句生成,反射功能我们在生成实体类对象时会用到.

整个过程基本如此,其中,重新生成DLL文件的步骤,如果采用动态编译的方法处理,似乎就变得简单多了.大致思路如下

1. 修改Db表结构的步骤依旧没有变化.

2. 生成DLL文件,采用动态编译.即在系统打开时,根据Db中的对象生成实体类,再直接编译生成DLL文件,与上个方法相比,编译DLL的过程由系统自动执行了,而不需要我们在公司编译.这样我们只需要保证SQL语句升级正确就可以了.

3. 根据生成好的DLL文件,我们再使用反射就OK了

当然,动态编译的功能还远远不止于此,比如:生成一段NET字符串,动态执行等.有兴趣的童鞋,可以在博客园里搜索下,这里推荐一下这篇文章,确实不错.

地址:http://www.cnblogs.com/lichdr/archive/2004/10/20/54569.html

实现动态编译的方法其他很简单,如图-1所示.在我提供的下载文件中,有完整的方法,直接使用即可

图-1

我们再看看是如何使用这个方法来编译文件的,我们现在实现这样一个业务,客户需要新增加一张表,对应的实体也要增加,并实现实体的增删改查操作.如图-2所示,首先要制作好实体类的字符串

图-2

然后直接编译即可,如果编译成功,我们就直接可以使用反射对其操作了.如图-3所示

图-3

效果怎么样?这样处理的话,如果再遇到类似需求,我们需要做的事情,就是提供字符串就可以了,而不需要在公司生成DLL,由实施员负责覆盖.

技术的更新,会使我们在处理某些问题上变得更加容易和简单.

源文件

反射已经Out动态编译才能Hold住.Files

时间: 2024-10-10 06:24:21

反射已经"Out",动态编译才能"Hold"住的相关文章

C# 反射,动态编译

反射是动态获取程序集的元数据的一种技术,这句话是做.NET程序员面试题目的一个的答案,你可选择记住它,就好比高中生物学里面讲到的细胞的结构的课程时,细胞由细胞膜,细胞质和细胞核组成.根据做程序的经验,Never ask why不是好习惯,即使是微软的API,有时候违反了调用约定,也会很抓狂. 请看下面这一段代码 Assembly assembly = Assembly.GetExecutingAssembly(); object entryForm = Activator.CreateInsta

Java的反射机制和动态代理

介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能.正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样.知道了Java类的内部 结构之后,就可以与它进行交互,包括创建新的对象和调用对象中的方法等.这种交互方式与直接在源代码中使用的效果是相同的,但是又额外提供了运行时

浅谈VB.Net 程序的编译和动态编译

---恢复内容开始--- 一般,我们都是通过Visual Studio(下面简称vs)来编写和编译vb.net应用程序的,但是,不少的人并不知道vs是通过何种方式编译程序的.今天,我们就来探讨一下编译vb.net程序的真正原理. 这篇随笔包含如下几个部分: 1.VS是怎么编译的 2.通过vbc.exe来编译应用程序 3.在代码中通过VBCodeProvider动态编译应用程序 ok,首先来说说vs编译应用程序的方法.其实,vs是通过调用vbc.exe来编译vbnet应用程序的.vs把用户编写的代

Apache静态编译与动态编译区别

静态编译: 在编译时,已经把相关模块编译进httpd二进制文件中不用再 httpd.conf 中在 LoadModule 来加载,只要在  <ifmodule></ifmodule> 中来配置就可以了. 动态编译: 编译的时候,使用 enable-module=shared  或者 enable-modules-shared=module 来动态编译. 动态显然就不编译到httpd里面去了,启动的时候根本不会加载这个模块, 而是给你一个 module.so  文件.你想用,就在ht

动态生成java、动态编译、动态加载

我曾经见过一个“规则引擎”,是在应用系统web界面直接编写java代码,然后保存后,规则即生效,我一直很是奇怪,这是如何实现的呢?实际这就好像jsp,被中间件动态的编译成java文件,有被动态的编译成class,同时又动态的加载到classloader中.所以,本质上,纯java得规则引擎,是100%可以实现的. 1.动态生成java源代码.这个过程太过简单,直接略过. 2.动态编译. 我看我们自己的规则引擎也有动态编译,就是在生成BOM模型的时候.但是是调用Process执行javac.但这种

Java_Java SE6调用动态编译

转自:http://www.cnblogs.com/flyoung2008/archive/2011/11/14/2249017.html 一.使用JavaCompiler接口编译java源程序 我们可以通过ToolProvider类的静态方法getSystemJavaCompiler来得到一个JavaCompiler接口的实例. JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); JavaCompiler中最核心的方法是r

Java反射机制可以动态修改实例中final修饰的成员变量吗?

问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. 2. 当final修饰的成员变量在定义的时候并没有初始化值的话,那么就还能通过java反射机制来动态修改它的值. 实验: 1. 当final修饰的成员变量在定义的时候就初始化了值 1 public Class Person { 2 private final String name = "damon

Hold住你的时间

时间是这个世界上,最宝贵的财富.每个人都应该知道,但是回想自己每天的时间,却发现做的事寥寥无几,我们的时间从哪溜走了?? [时间都是怎么浪费的] 以下是你必须要知道的真相 1.平均每八分钟会受到一次打扰 2.平均每次打扰用时大约是五分钟,总共大约四小时. 3.如果你让自己一天做一件事情,你会花一整天去做: 4.如果你让自己一天做二十件事情,则会完成七至八件甚至更多. 5.一年之中,你真正在做有价值的事情的时间不会超过九十天. 6.三年前,如果你好好的规划一下你的人生和时间: 7.你能够取得一定是

c#:实现动态编译,并实现动态MutilProcess功能(来自python mutilprocess的想法)

由于之前一直遇到一些关于并行进行数据处理的时效果往往不好,不管是c#还是java程序都是一样,但是在Python中通过mutilprocess实现同样的功能时,却发现确实可以提高程序运行的性能,及服务器资源使用提高.python具体性能及mutilprocess用法,请参考:<Python:使用pymssql批量插入csv文件到数据库测试> 如有转载请标明原文地址:https://i.cnblogs.com/EditPosts.aspx?postid=7228337 很久之前就设想如何在c#中