飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446

经过不断的完善,代码生成器已经实现了一些功能,并做好了相应的插件接口,版本1提供了以下接口:数据源(Source)、模板(Template)、另存为(SaveAs)、外接工具(Tool)和数据扩展(DataExtend)五个插件接口,并做了相应的示例。

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第1张图片

一、数据源

      目前只实现了从OleDB和PowerDesign中获取表信息,其他方式大家可以进行研究,比如Visio的,还有ERwin的。

      数据源菜单

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第2张图片

      OleDb数据管理器,可以自动生成连接字符串。

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第3张图片

      打开数据源后,读出所有的表结构,如果要列出视图,请在“工具”--“选项”中配置。

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第4张图片

      右边“属性”窗口可以对表及字段进行定义,比如外键、枚举等。

      外键编辑器,在“属性”窗口中单击外键编辑按钮,进行对应关系的编辑。

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第5张图片

      枚举编辑器,为实体属性定义枚举,同样在“属性”窗口中单击枚举编辑器。

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第6张图片

      关于属性类型,是由模板进行加载的,注意到在fbd_cs.bct中有convert="csconvert.config"这样的定义,字段类型与属性类型的转换就在这个文件里,目前只配置了OleDb以及SqlServer的。

      除此之外,在code目录中,oracle_property.cs和sqlserver_property.cs分别获取Oracle及SqlServer字段的默认值、说明等,在Source.Database.config中定义了各种OldDb提供者所要引用的代码文件:

代码
<? xml version="1.0" ?>
< config >
  
< provider  id ="SQLOLEDB"  language ="CSharp"  filename ="code\sqlserver_property.cs"   />
  
< provider  id ="MSDAORA"  language ="CSharp"  filename ="code\oracle_property.cs"   />
  
< datasource >
    
< name > FbTestDb </ name >
    
< connectionString > Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=fbTesTdb;Data Source=. </ connectionString >
  
</ datasource >
</ config >

 

 

二、模板

      目前只做了一个模板,即Template.FbBase,但已经足够强大了,分别又定义了HTML、Sql脚本、FaibClass.Data及NHibernate(由于本人没有研究过它的映射,因此只定义了简单的映射,更复杂的表间关系可以参考code中的相关代码)。

      Template.FbBase模板是由XML语言定义的,如下面这个示例:

代码
<? xml version="1.0" encoding="utf-8"  ?>
<!--  该文件由faib studio定义,版本为1.0  -->
< config  name ="生成MSSQL脚本"  language ="Sql"  convert ="csconvert.config" >
  
<!--  定义一些常量  -->
  
< defkeys >
    
< key  name ="Author" > Faib </ key >
  
</ defkeys >
  
<!--  定义函数集,引入代码文件编译  -->
  
< functions >
    
<!--  Name要与下面代码中的$Name$对应
    language=CSharp|VBasic
    file=代码文件
    
-->
    
< function  name ="ColumnSql"  language ="CSharp"  for ="Column"  file ="code\sqlcolumn.cs"   />
  
</ functions >
  
<!--  定义生成部份  -->
  
< parts >
    
<!--  部份1 
    file=保存路径
    loop=None|Tables|Columns|PrimaryKeys|SubObjects|SubObjects|Enums|EnumValues 循环的对象体
    
-->
    
< part  name ="SQL"  file ="Design\create.sql"  loop ="None" >
      
<!--  定义节 -->
      
< sections >
        
< section  name ="TableCreate"  loop ="Tables" >
          
< sections >
             
< section  name ="ColumnArray"  loop ="Columns"  endchar ="," >
    [$ColumnName$] $GetColumnSql()$
</ section >
             
< section  name ="ColumDescript"  loop ="Columns" >
<![CDATA[ $AddColumnDescription()$
go
]]>
             
</ section >
             
< section  name ="PrimaryCreate"  loop ="PrimaryKeys" >
<![CDATA[ alter table $TableName$
    add constraint PK_$TableName$_$ColumnName$ primary key ($ColumnName$)
go
]]>
             
</ section >
          
</ sections >
          
<!--  代码体  -->
          
< body >
    
<![CDATA[
create table [$TableName$] ($ColumnArray$
)
go

$PrimaryCreate$

-- Region 添加说明
$AddTableDescription()$
go

$ColumDescript$
-- EndRegion
]]>
          
</ body >
        
</ section >
        
< section  name ="ReferenceDelete"  loop ="Tables" >
          
< sections >
             
< section  name ="ReferenceDelete1"  loop ="RefObjects" >
<![CDATA[ if exists (select 1
    from sysobjects
    where id = object_id('FK_$FKTableName$_$PKTableName$')
    and type = 'F')
        alter table $FKTableName$
        drop constraint FK_$FKTableName$_$PKTableName$
go
]]>
             
</ section >
          
</ sections >
          
< body >
    
<![CDATA[ $ReferenceDelete1$ ]]>
          
</ body >
        
</ section >
        
< section  name ="ReferenceCreate"  loop ="Tables" >
          
< sections >
             
< section  name ="ReferenceCreate1"  loop ="RefObjects" >
<![CDATA[ alter table $FKTableName$
    add constraint FK_$FKTableName$_$PKTableName$ foreign key ($FKColumnName$)
        references $PKTableName$ ($PKColumnName$)
go
]]>
             
</ section >
          
</ sections >
          
< body >
    
<![CDATA[ $ReferenceCreate1$ ]]>
          
</ body >
        
</ section >
        
< section  name ="TableDelete"  loop ="Tables" >
<![CDATA[
if exists (select 1
    from sysobjects
    where id = object_id('$TableName$')
    and type = 'U')
        drop table [$TableName$]
go
]]>
        
</ section >
      
</ sections >
      
< body >
        
<![CDATA[
-- =======================================================
-- 本脚本由CodeBuilder工具生成
-- 版权所有 (C) Faib Studio 2009
--
-- 创建人员: $Author$
-- 创建时间: $Now$
-- =======================================================

-- Region 删除关系
$ReferenceDelete$
-- End Region

-- Region 删除表
$TableDelete$
-- End Region

-- Region 创建表
$TableCreate$
-- End Region

-- Region 创建关系
$ReferenceCreate$
-- End Region
]]>
      
</ body >
    
</ part >
  
</ parts >
</ config >

 

 

三、外接工具

      可将工具挂接到CodeBuilder内,可以设置放在“工具”菜单、工具栏按钮、表菜单以及托盘菜单。目前系统中一共做了三个工具:收藏夹、RSS订阅以及表处理。

 

四、另存为

      做了一个简单的将架构保存到XML的插件。

 

五、数据扩展

      如果你觉得现有的架构接口不够你使用,那么可以自己做扩展,在这个版本里有CaitORMExtend示例,加载后会在“属性”窗口的扩展处进行设置。

飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446_第7张图片

 

      大概功能就这些,欢迎大家多多提出指定意见,小弟在此不胜感激。

 

 

下载1446版本 http://files.cnblogs.com/faib/CodeBuilder_1.0.0.1446_setup.rar

你可能感兴趣的:(builder)