首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

让工作更轻巧——EA类图与代码同步

2012-09-09 
让工作更轻松——EA类图与代码同步进入主题之前,先说一下ea工具:EA——Enterprise Architect,是一种建模工具,

让工作更轻松——EA类图与代码同步



    进入主题之前,先说一下ea工具:EA——Enterprise Architect,是一种建模工具,想了解请点解 这里 


    随着能力的提升,现在做的项目,都要求先画类图,再敲代码,但是每次画图后,在敲代码起初,还跟图对应着呢,到后来,发现图中有不合适的地方,然后就把图改一下,再敲代码,但是图中错误太多的话,就懒得再去改图了,直接修改代码了。这样时间一长,图就算废弃了。开发完了,态度好一点的人,会用代码去生成一下图去交差,有的干脆不管了,结果给同一项目组其他同事的工作造成了很大的影响。当然我说的这种情况在小公司中存在的比较多。当然我们在自学的时候,也会遇到这种情况。


    如何解决这一问题呢?
    从根本上说,当然是分析到位,画图时考虑周全,程序员要严格的按图跟文档去编码。不能私自更改代码。如需更改,需要将建议提交到项目经理那去审核,由项目经理去修改。当然好多公司或者个人不会按照这些步骤走。毕竟改过来改过去,会浪费很多时间。所以让图和代码同步,即可解决这一问题。


    先说思路吧:我这里用到的是EA和VS2010,用EA画类图,然后生成代码框架。在VS项目中添加生成的代码,然后在VS中修改代码,可以在EA中通过逆向代码工程更新原来的类图。


    简单的演示一下:
    首先创建一个项目,我这里创建的是控制台应用程序:

让工作更轻巧——EA类图与代码同步


然后在EA中画一个类图
让工作更轻巧——EA类图与代码同步


在右键,选择生成代码:(因为我这个是单个类,所以直接在类上选择生成代码,如果你类图中类比较多,可以在上面那个类似文件夹的图标上,选择生成代码)
让工作更轻巧——EA类图与代码同步
选择项目文件夹下,并选对相对应语言。我这里用的是C#。点击生成即可。如图:
让工作更轻巧——EA类图与代码同步
这样在项目文件夹下,就看见多了一个Human.cs文件
让工作更轻巧——EA类图与代码同步
现在这个图跟代码就已经建立的关系,因为EA中集成了代码编辑器,所以我们可以通过在类上右键,选择查看源代码:
让工作更轻巧——EA类图与代码同步
就可以打开源代码了:
让工作更轻巧——EA类图与代码同步


然后在vs项目中,添加上刚生成的cs,
让工作更轻巧——EA类图与代码同步


这样,在vs项目中,就多了一个Human类:
让工作更轻巧——EA类图与代码同步


打开看一下,由图直接生成的代码:


  让工作更轻巧——EA类图与代码同步
  
再看看类的效果:
 让工作更轻巧——EA类图与代码同步已经成功的更新上去了。
当我们在修改类图后,选择修改后的类,再次生成代码,即可更新原来的代码。
现在我们在Human类中添加一个telphone及对应属性:
让工作更轻巧——EA类图与代码同步

右键生成代码后的源码:

/////////////////////////////////////////////////////////////  Human.cs//  Implementation of the Class Human//  Generated by Enterprise Architect//  Created on:      23-八月-2012 17:23:58//  Original author: Admin///////////////////////////////////////////////////////////namespace Human {/// <summary>/// <b>学生类</b>/// <b>包括5个字段:name,age,sex,address,telphone</b>/// <b>添加对应的3个属性Name,Age,Sex,Address,Telphone</b>/// <b>2个方法:</b>/// <b>构造方法和Print方法</b>/// </summary>public class Human {/// <summary>/// 年龄/// </summary>private int age;/// <summary>/// 姓名/// </summary>private string name;/// <summary>/// 性别/// </summary>private string sex;        /// <summary>        /// 住址        /// </summary>        private string address;/// <summary>/// 电话/// </summary>private int telphone;        /// <summary>        /// 住址        /// </summary>        public string Address        {            get            {                return address;            }            set            {                name = value;            }        }public Human(){}~Human(){}public virtual void Dispose(){}/// <summary>/// 构造函数/// </summary>/// <param name="name">姓名</param>/// <param name="age">年龄</param>/// <param name="sex">性别</param>public Human(string name, int age, string sex){            this.name = name;            this.age = age;            this.sex = sex;}/// <summary>/// 年龄/// </summary>public int Age{get{return age;}set{age = value;}}/// <summary>/// 姓名/// </summary>public string Name{get{return name;}set{name = value;}}/// <summary>/// 输出学生信息/// </summary>public void Print(){            System.Console.WriteLine("我叫 "+name+","+sex+",年方"+age);}/// <summary>/// 性别/// </summary>public string Sex{get{return sex;}set{sex = value;}}/// <summary>/// 电话/// </summary>public int Telphone{get{return telphone;}set{telphone = value;}}}//end Human}//end namespace Human




我们发现当初修改的构造函数和Print方法中的源码部分,并没有被删除。这说明,图只对代码进行了更新,而不是覆盖操作。


演示就到这里。


    通过刚才的演示,我们可以清楚的看到图和代码的同步,不再是那么遥不可及。我们不用再为了改代码而改图了。可以节省大量的时间。


    当然,这个方案,只是一个代码和图脱节的补救措施。最终要的还是在前期尽可能的设计好,在编码时严格按照图和文档进行编码,才不会出席那代码与图的脱节现象。

    回首一望,才发现,其实我们总是在有意无意的遵循着“简单原理”,也正是由于“简单原理”,我们的效率才会不断的提高,我们才会不断的进步。
    


5楼laner05152小时前
EA真强大
Re: xiaoxian80232小时前
回复laner0515n绝对强大呀
4楼lfsfxy9昨天 23:23
好,正向工程和逆向工程,很强大的。n不将就,多分享一些这样的信息工具的使用。共同进步!
3楼zs15932616453昨天 21:36
顶一个
Re: xiaoxian8023昨天 21:36
回复zs15932616453n可以试试
2楼aboy123昨天 20:52
“懒人”想出的办法,节约了开发的时间
Re: xiaoxian8023昨天 21:35
回复aboy123n有了懒人,才有了进步。
1楼lilongsheng1125昨天 20:21
强大的EA
Re: xiaoxian8023昨天 20:52
回复lilongsheng1125nEA很强大的

热点排行