zoukankan      html  css  js  c++  java
  • 飞软代码生成器(CodeBuilder)版本发布 1.0.0.1446

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

    一、数据源

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

          数据源菜单

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

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

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

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

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

          关于属性类型,是由模板进行加载的,注意到在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示例,加载后会在“属性”窗口的扩展处进行设置。

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

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

  • 相关阅读:
    笨笨走了
    WSE 3.0 文档翻译:WSE架构
    系列文章索引
    WSE 3.0 文档翻译:WSE的新功能
    人分四品
    手把手教你装饰vs2005项目上如何添加右键菜单
    递归算法学习系列之三(快速排序)
    ip地址与数字相互转换的sql函数
    递归算法学习系列之寻找第K大
    WSE 3.0 文档翻译:什么时候使用WSE 3.0
  • 原文地址:https://www.cnblogs.com/faib/p/1643738.html
Copyright © 2011-2022 走看看