承接上篇《EA中的正向工程》,这次是EA中的逆向工程,何为逆向工程?逆向工程指的是针对已有的,推出其实现的设计和细节,本文要说的是针对已有的代码和数据库,生成其架构图的过程。
EA中的逆向工程
代码→架构图
从代码转换到架构图,主要是为了复用已经存在的架构,转为类图到EA中,在此基础上拓展,从而复用这些类图,以下列代码为例:
///////////////////////////////////////////////////////////
// ItemManager.cs
// 作用:项目管理模块
// 创建日期:2012年8月12日
// 作者: ***
// 小组: ******
///////////////////////////////////////////////////////////
using Entity;
using DAL;
using System.Data;
using System;
using System.Text;
namespace BLL
{
public class ItemManager
{
ItemDAO itemDao = new ItemDAO();
///
/// 添加项目
///
/// 使用item实体中的全部属性
public bool AddItem(Item item)
{
//防止项目名称重复(根据item的Name和SectionID查询是否存在记录)
if (itemDao.QueryItemByName(item).Rows.Count != 0)
{
throw new Exception("该科室下面已经存在此项目!");
}
//防止项目编号重复
else if (itemDao.QueryItemByItemID(item).Rows.Count != 0) {
throw new Exception("该项目编号已经存在,请重新填写!");
}
//添加成功
else if (itemDao.AddItem(item))
{
throw new Exception("添加项目成功!");
}
//添加失败
else
{
throw new Exception("添加项目失败!");
}
}
///
/// 根据项目id删除该项目
///
/// 使用item实体中的id属性
public bool DeleteItemByID(Item item)
{
//删除成功
if (itemDao.DeleteItemByID(item))
{
throw new Exception("删除项目成功!");
}
//删除失败
else
{
throw new Exception("删除项目失败!");
}
}
///
/// 根据科室id获取包含所有项目
///
/// 使用sections实体中的id属性
public DataTable QueryItemBySectionID(Sections sections)
{
return itemDao.QueryItemsBySectionID(sections);
}
}//end ItemManager
}
在EA中建立一个类图,导入源代码:
生成的类图:
生成的类图,不止包含方法属性,也包含注释的所有信息:
数据库表→架构图实体
数据库→数据模型图
EA还可以导入数据库表,生成对应的数据库模型图,需要建立ODBC数据源,具体过程不再赘述。
导入ODBC数据源:
选择要导入的表:
生成的数据库模型图:
EA中正向工程和逆向工程就先介绍到这里,EA的这些功能并不难学,难的是理解“复用”这一思想,何为复用?借用已存在的成熟的事物,一想,这不就是“站在巨人的肩膀上”么,不过是换了个说法而已。编程中,同样的工作一直重复,得需要想想是否有可“复用”的内容,否则,只能埋头苦做无用功。