微软.NET技术实践 ORM开发系列文章汇总 智能提示的模板编辑器Template Studio 和 查询追踪器 LLBL Gen Profiler
2011-09-09 15:07
1091 查看
这篇文章起源于我的LLBL Gen 3.x ORM源码追踪系列教程,有以下几篇文章
LLBL Gen 3.x 源代码追踪与解析 认识框架结构
LLBL Gen 3.x 源代码追踪与解析 Type Converter 类型转换器
LLBL Gen 3.x 源代码追踪与解析 存储过程的执行
LLBL Gen 3.x 源代码追踪与解析 查询命令的追踪
LLBL Gen 3.x 源代码追踪与解析 验证Validation的原理和流程
ERP/MIS开发 开发LLBL Gen 插件(Plun-in) Implementing a plug-in
很多朋友都疑惑,分析源代码有什么用呢,别人的代码是这样写的,我不可能写一个同样的软件,所以没有必要分析它的源代码。因为工作的关系,我猜想,大部分朋友,都不会依靠分析源代码来提高代码开发技术,这个过程太缓慢,不容易有效果,我们提升技术的最快方法一般是读文章,在实际应用的时候再多练习应用。
以下两个软件,是我通过使用,分析LLBL Gen 3.x的代码,体会出来的心得,也是.NET实践的内容。
<%
Project currentProject = _executingGenerator.ProjectDefinition;
EntityDefinition currentEntity = (EntityDefinition)_activeObject;
%>
using System;
using System.Data;
如果你不熟悉,可以参考我的文章《Template Studio 模板开发入门 Lpt templates Development》,以帮助理解。
引用里面的讲解,_executingGenerator是Template Studio内置的变量,在运行时动态传入值,它的类型是IGenerator,定义于程序集SD.LLBLGen.Pro.GeneratorCore中。还有两个变量
_parameters, 类型是Dictionary(String, TaskParameter) ,存放当前task的参数
_activeObject, 如果emitType=allEntites,则它代表当前的实体对象。
所以,我要达到的效果是这样
当敲入_executingGenerator类型的变量时,可以显示它的成员列表,以方便快速的编辑模板。
如果你读过我的文章,《工作五年的.NET程序员再谈应用反射,动态编译,代码生成器》,它提到的模板语法如下
<%@ Property Name="Math" Type="MathProgram" Category="Text"Description="Namespace for this class" %>
<%@ Property Name="IncludeDelete" Type="System.Int32" Default="123" Category="Options" Description="If true delete statements will be generated." %>
<%@ Assembly Name="TestClassLibrary" %>
<%@ Import Namespace="EPN.Common" %>
LLBL Gen 3.x的lpt模板文件定义和上面的Code Smith的模板定义有区别,所以,那篇文章中提到的技术,需要改良一下,才可以达到智能提示的目的。
通过Socket技术,把追踪到的SQL,输出到指定的服务器窗口中,然后在自动转化为窗体下方的可运行的SQL语句,这是它的主要功能。
ORM追踪的难题之一是ORM框架会生成动态SQL语句,可以直接运行,但是修改起来很麻烦。
请看下面的动态SQL语句的例子
EXECUTE (N'SELECT * FROM Groups')
SP_EXECUTESQL N'SELECT * FROM Groups'
提到动态SQL语句,这句话可能很重要:EXECUTE 括号里面只能是字符串变量、字符串常量、或它们的连接组合,不能调用其它一些函数、存储过程等。 如果要使用,则使用变量组合。
什么时候用动态SQL语句,当SQL的结构不能确定(即表名和列名),用动态SQL。
LLBL Profile把ORM动态生成的SQL语句,转化成静态的SQL语句,可用来修改,这是它的主要功能点。
我在追踪程序的结果或SQL的结果有区别时,经常用这个办法,来找到问题所在。
在我写过这个软件之后,又到互联网上搜索了一下,发现有个叫LLBL Gen Profile的商业软件,做的很不错。
商业的软件,肯定会有界面友好,易用性,稳定性上面下功夫。和它比起来,我的软件简直就是丑小鸭,我想要是能多坚持一段时间的开发,肯定可以做得再好一些。
如果要了解更多的关于ORM追踪的内容,请参考文章《信息化基础建设 开发框架》中的SQL Profiler 跟踪查询小节。
LLBL Gen 3.x 源代码追踪与解析 认识框架结构
LLBL Gen 3.x 源代码追踪与解析 Type Converter 类型转换器
LLBL Gen 3.x 源代码追踪与解析 存储过程的执行
LLBL Gen 3.x 源代码追踪与解析 查询命令的追踪
LLBL Gen 3.x 源代码追踪与解析 验证Validation的原理和流程
ERP/MIS开发 开发LLBL Gen 插件(Plun-in) Implementing a plug-in
很多朋友都疑惑,分析源代码有什么用呢,别人的代码是这样写的,我不可能写一个同样的软件,所以没有必要分析它的源代码。因为工作的关系,我猜想,大部分朋友,都不会依靠分析源代码来提高代码开发技术,这个过程太缓慢,不容易有效果,我们提升技术的最快方法一般是读文章,在实际应用的时候再多练习应用。
以下两个软件,是我通过使用,分析LLBL Gen 3.x的代码,体会出来的心得,也是.NET实践的内容。
Template Studio
LLBL Gen 3.x有自己的Template Studio,但是它不提供智能提示支持,这样写代码,效率不高,于是我想到做一个带智能提示的模板编辑器,请看下面的模板定义,LLBL Gen 3.x的lpt类型的模板定义<%
Project currentProject = _executingGenerator.ProjectDefinition;
EntityDefinition currentEntity = (EntityDefinition)_activeObject;
%>
using System;
using System.Data;
如果你不熟悉,可以参考我的文章《Template Studio 模板开发入门 Lpt templates Development》,以帮助理解。
引用里面的讲解,_executingGenerator是Template Studio内置的变量,在运行时动态传入值,它的类型是IGenerator,定义于程序集SD.LLBLGen.Pro.GeneratorCore中。还有两个变量
_parameters, 类型是Dictionary(String, TaskParameter) ,存放当前task的参数
_activeObject, 如果emitType=allEntites,则它代表当前的实体对象。
所以,我要达到的效果是这样
当敲入_executingGenerator类型的变量时,可以显示它的成员列表,以方便快速的编辑模板。
如果你读过我的文章,《工作五年的.NET程序员再谈应用反射,动态编译,代码生成器》,它提到的模板语法如下
<%@ Property Name="Math" Type="MathProgram" Category="Text"Description="Namespace for this class" %>
<%@ Property Name="IncludeDelete" Type="System.Int32" Default="123" Category="Options" Description="If true delete statements will be generated." %>
<%@ Assembly Name="TestClassLibrary" %>
<%@ Import Namespace="EPN.Common" %>
LLBL Gen 3.x的lpt模板文件定义和上面的Code Smith的模板定义有区别,所以,那篇文章中提到的技术,需要改良一下,才可以达到智能提示的目的。
LLBL Profile
这个软件,是用于跟踪LLBL Gen的动态输出的SQL语句,并且把它转化成可直接运行的SQL语句。LLBL Gen 的Trace输出的SQL不是标准的SQL,需要适当的转换一下才能运行。请看下图通过Socket技术,把追踪到的SQL,输出到指定的服务器窗口中,然后在自动转化为窗体下方的可运行的SQL语句,这是它的主要功能。
ORM追踪的难题之一是ORM框架会生成动态SQL语句,可以直接运行,但是修改起来很麻烦。
请看下面的动态SQL语句的例子
EXECUTE (N'SELECT * FROM Groups')
SP_EXECUTESQL N'SELECT * FROM Groups'
提到动态SQL语句,这句话可能很重要:EXECUTE 括号里面只能是字符串变量、字符串常量、或它们的连接组合,不能调用其它一些函数、存储过程等。 如果要使用,则使用变量组合。
什么时候用动态SQL语句,当SQL的结构不能确定(即表名和列名),用动态SQL。
LLBL Profile把ORM动态生成的SQL语句,转化成静态的SQL语句,可用来修改,这是它的主要功能点。
我在追踪程序的结果或SQL的结果有区别时,经常用这个办法,来找到问题所在。
在我写过这个软件之后,又到互联网上搜索了一下,发现有个叫LLBL Gen Profile的商业软件,做的很不错。
商业的软件,肯定会有界面友好,易用性,稳定性上面下功夫。和它比起来,我的软件简直就是丑小鸭,我想要是能多坚持一段时间的开发,肯定可以做得再好一些。
如果要了解更多的关于ORM追踪的内容,请参考文章《信息化基础建设 开发框架》中的SQL Profiler 跟踪查询小节。
相关文章推荐
- 信息化基础建设系列文章汇总 .NET 平台业务项目实践
- 一起谈.NET技术,VS 2010 和 .NET 4.0 系列之《VS 2010代码智能提示的改进》篇
- Web前端开发最佳实践系列文章汇总
- 一起谈.NET技术,Visual Studio 2010中敏捷开发流程模板的应用
- Asp.net服务器控件开发系列文章 汇总
- wordpress二次开发教程手记:为文章编辑器添加一个提示消息
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 文章汇总及学习指南 推荐
- 《COM组件开发实践》系列文章
- 一起谈.NET技术,WPF 基础到企业应用系列3——WPF开发漫谈
- .net 中 数据库的查询参数写法。微软其他开发环境同理
- 一起谈.NET技术,MSDN Webcast:ASP.NET MVC2程序开发入门到精通系列课程
- 技术文章,iOS,iOS开发系列
- Android 快速开发系列 ORMLite 框架最佳实践
- FPGA技术实践文章汇总
- 微软.NET开发认证基础技术知识大局观——核心篇
- 微软一站式代码示例库开发实践系列课程
- .NET系列文章——近一年文章分类整理,方便各位博友们查询学习
- DotNET企业架构应用实践-系统架构与性能-缓存技术与ORM中的缓存查询技术
- Android Studio live template巧用动态模板也能大大提高你的开发效率
- 微软技术开发案例学习系列课程(视频课程讲师:徐晓卓)