(三)autoCode类设计

由于代码生成系统需要支持多种数据库,因此在类的设计上需要仔细得思考下,把相同的部分抽取出来,不同的部分通过接口或抽象类来扩展.

先来看下不同的地方

  1. 获取数据库中所有的表
  2. 获取表中的字段信息

再来看相同的地方:

  1. 返回表名集合
  2. 返回SQL上下文集合(SQL上下文中已经封装好了表名,字段等信息)

 

针对于相同点和不同点,我分别用了两个抽象来来实现

(三)autoCode类设计_第1张图片

如果所示,getShowTablesSQL()返回的是查询所有表名的SQL,getTableDetailSQL()返回具体表信息的SQL,buildColumnDefinition()是构建字段信息.这三个方法需要子类去实现.

 

getTableList()是抽象类中已经实现好的方法,用来返回表名集合

同样buildSQLContextList()也是抽象类中实现好的方法,用来构建SQL上下文,SQL上下文中已经封装好了表名,字段等信息

我们需要用到的也只有这两个方法而已

 

以后要添加其它数据库类型,只需要继承者两个类即可

下面贴上用户操作序列图

(三)autoCode类设计_第2张图片

 

最后贴上系统生成代码的序列图

(三)autoCode类设计_第3张图片

 

  1. 用户请求到Controller类
  2. Controller类调用Service中的generate()方法
  3. Service通过工厂类构建出对应的数据库类型SQLService,这个SQLService决定了使用哪种数据库
  4. 接着SQLService获取TableSelector
  5. TableSelector通过表名构建SQLContext上下文
  6. 遍历SQLContext上下文,通过velocity模板生成代码内容

 

 

你可能感兴趣的:((三)autoCode类设计)