代码生成器设计说明书_第1页
代码生成器设计说明书_第2页
代码生成器设计说明书_第3页
代码生成器设计说明书_第4页
代码生成器设计说明书_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

代码生成器设计说明书版本号:1.0时间:修改时间:版权所有:引言编写目的 说明编写这份总体设计说明书的目的,指出预期的读者。本文档为.net平台中代码生成器的开发、测试提供依据、指导。预期的读者主要包括相关开发人员,测试人员。设计目标从现有数据库中生成ADNet1.0标准框架中的数据访问层,包括实体对象,IDAL,DAL,BLL层代码,并根据数据库自动生成解决方案,每层的项目文件及各个表的代码文件。下图就是ADNet平台体系架构图。ADNet平台体系架构图背景项目程序员在一个项目开发中需要花很多时间编写与数据库相关的数据访问层相关的代码,而这些代码结构相同,内容相似,与数据库联系紧密,代码量大。为了让项目程序员从这些繁重的重复的代码编写工作解脱出来,专心于业务逻辑的代码编写,我们需要设计一个根据数据库中的表自动产生数据访问层相关的代码文件。由于Model,IDAL,DAL,BLL层代码结构固定,变化不大,使自动生成代码成为可能。所以我们在这个基础上设计了代码生成器。定义 列出本文件用到的专门术语的定义和外文首字母组词的原词组。参考资料动软.Net代码生成器(参考其程序结构功能)ADNetDemo代码文件(参考其代码几层的结构及规范)框架设计应用架构我们从数据库抽取,代码生成两个结构来说明。数据结构抽取数据结构抽取读取Oracle,SQLServer,MySQL数据库结构执行sql语句读取表结构及字段属性代码生成用户定义字段,层的代码生成批量生成代码文件体系结构DB字段元数据DB字段元数据Sql语句执行代码生成引擎代码显示UI用户自定义代码生成,及数据操作总体架构体系结构代码生成器详细设计概述代码生成器主要实现数据字段的读取和代码文字的组装,然后就是利用控件TextEditorControl实现对SQL语句和C#代码的高亮显示;最后我们界面利用DotNetBar控件做成类似于VS2005的界面风格。功能列出主要功能:访问三种不同数据库产生数据库的树形列表查看数据库属性(表,视图,存储过程,字段)通过表名自动产生SQL基本语句(select,insert,update,delete)执行sql语句并返回结果获得视图,存储过程的sql定义用户自定义代码生成(可选择层,可选择生成的DAL函数)用户批量生成代码文件(解决方案文件,项目文件,各个层的代码文件)解决方案总体组件包结构:下面是代码生成器主要结构包图。说明:接口IDAL主要功能是获取不同数据库的各个名称,内容,以及获取表结构,字段结构,视图,存储过程定义,并提供接口执行SQL语句。TextCodeUtility类,主要通过字段信息按照规范组装C#代码。ADFactroyModelCodeEdit类,主要通过TextCodeUtility类生成各个层代码并写入TextCode控件或者生成cs文件。DocEditFramework该包,主要生成SQL执行页面和数据库属性页面,用于动态创建。DBUtility用于提供访问各个数据库通用接口。类图参与者和职责策略相关模式为了实现对不同数据库访问,我们主要使用了工厂模式。效果关键应用场景代码片断//获取字段明细publicSystem.Data.DataTableGetTableColDetails(stringDBName,stringTableName){StringBuildersqlDetails=newStringBuilder();sqlDetails.Append("selectORDINAL_POSITIONas序号,COLUMN_NAMEas列名,DATA_TYPEas字段类型,");sqlDetails.Append("ifnull(CHARACTER_MAXIMUM_LENGTH,0)+ifnull(NUMERIC_PRECISION,0)as长度,");sqlDetails.Append("caseIS_NULLABLEwhen'YES'thentrueelsefalseendas是否为空,");sqlDetails.Append("caseCOLUMN_KEYwhen'PRI'thentrueelsefalseendas是否主键");sqlDetails.Append(string.Format(@"frominformation_schema.COLUMNSwhereTABLE_SCHEMA='{0}'andTABLE_NAME='{1}';",DBName,TableName));returnDB.ExecuteQuery(sqlDetails.ToString());}//根据需要获取表,视图,存储过程列表publicSystem.Data.DataTableGetDBTableDetails(stringDBName,DBOBJTypetype){StringBuildersqlDetails=newStringBuilder();sqlDetails.Append(@"selectTABLE_NAMEAS名称,caseTABLE_TYPEwhen'BASETABLE'THEN'基础表'when'VIEW'then'视图'");sqlDetails.Append(@"when'SYSTEMVIEW'then'系统视图'else'表'endas类型,'dbo'as所有者,CREATE_TIMEas创建时间");sqlDetails.Append("frominformation_schema.TABLES");switch(type){caseDBOBJType.A:sqlDetails.Append(string.Format("whereTABLE_SCHEMA='{0}'union",DBName));sqlDetails.Append("selectnameas名称,'存储过程'as类型,'dbo'as所有者,createdas创建时间");sqlDetails.Append(string.Format("fromcwheredb='{0}'",DBName));break;caseDBOBJType.U:sqlDetails.Append(string.Format("whereTABLE_SCHEMA='{0}'andTABLE_TYPE='BASETABLE'",DBName));break;caseDBOBJType.V:sqlDetails.Append(string.Format("whereTABLE_SCHEMA='{0}'andTABLE_TYPE='VIEW'",DBName));break;caseDBOBJType.P:sqlDetails.Remove(0,sqlDetails.Length);sqlDetails.Append("selectnameas名称,'存储过程'as类型,'dbo'as所有者,createdas创建时间");sqlDetails.Append(string.Format("fromcwheredb='{0}'",DBName));break;}sqlDetails.Append("orderby类型,名称;");returnDB.ExecuteQuery(sqlDetails.ToString());}//获取sql语句publicstringGetDDLScriptFromName(stringDBName,stringTableName,DDLddl){stringsqlstring;switch(ddl){caseDDL.SELECT:sqlstring=GetSelectTableScriptFromName(DBName,TableName);break;caseDDL.INSERT:sqlstring=GetInsertScriptFromName(DBName,TableName);break;caseDDL.UPDATE:sqlstring=GetUpdateTableScriptFromName(DBName,TableName);break;caseDDL.DELETE:sqlstring=GetDelScriptFromName(DBName,TableName);break;default:sqlstring=GetSelectTableScriptFromName(DBName,TableName);break;}returnsqlstring;}下面列几个组装代码的函数privateList<string>GetExistsDALCode(){List<string>ExistsCode=newList<string>();stringstrdefine="";List<ColumnDetails>listpk=GetFieldPKFromColList();ExistsCode.AddRange(FunctionExpress("是否存在该记录"));stringstrsql="publicboolExists(";if(listpk.Count>0)strdefine=GetPKListDefine(listpk);strsql+=strdefine+")";ExistsCode.Add(strsql);ExistsCode.Add("{");ExistsCode.Add("stringSQL;");ExistsCode.Add(string.Format(@"SQL=""SelectCount(*)From{0}"";",tableName));strsql="";if(listpk.Count>0){strsql=@"SQL+=""where";foreach(ColumnDetailscolinlistpk){strsql+=string.Format("{0}=@{0}and",col.ColName);}strsql=strsql.Substring(0,strsql.Length-4)+@""";";ExistsCode.Add(strsql);ExistsCode.AddRange(AddParmList(listpk));}ExistsCode.Add("returnthis.Session.Exists(CommandType.Text,SQL,parameters);");ExistsCode.Add("}");returnExistsCode;}publicList<string>GetDALCode(Methodlistmlist){List<string>dallist=newList<string>();dallist.Add(string.Format("publicclass{0}_DAO:I{0}_DAO",tableName));dallist.Add("{");dallist.Add("publicISessionSession{get;set;}");dallist.Add(string.Format("#regionI{0}_DAO成员",this.tableName));if(mlist.IsGetMaxID)dallist.AddRange(GetMaxIDDALCode());if(mlist.IsExists){dallist.AddRange(GetExistsDALCode());dallist.AddRange(GetExistsWhereDALCode());}if(mlist.IsAdd){dallist.AddRange(GetAddDALCode());}if(mlist.IsUpdate){dallist.AddRange(GetUpdateDALCode());dallist.AddRange(GetUpdatesWhereDALCode());}if(mlist.IsDelete){dallist.AddRange(GetDeleteDALCode());dallist.AddRange(GetDeletesWhereDALCode());}if(mlist.IsGetModel){dallist.AddRange(GetEntityDALCode());dallist.AddRange(GetEntitysWhereDALCode());}if(mlist.IsGetList){dallist.AddRange(GetListDALCode());}dallist.Add("#endregion");dallist.Add("}");returndallist;}privateList<string>GetDALCodeToList(){List<string>DALList=newList<string>();DALList.Add("usingSystem;");DALList.Add("usingSystem.Collections.Generic;");DALList.Add("usingSystem.Linq;");DALList.Add("usingADNet.DBUtility;");DALList.Add("usingSystem.Data;");DALList.Add("usingSystem.Text;");DALList.Add(string.Format("using{0}.IDAL;",topspacename));DALList.Add("usingSystem.Collections;");DALList.Add(string.Format("using{0};",DataAcess.DBusing));DALList.Add(string.Format("using{0}.Entity;",topspacename));DALList.Add("usingAD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论