八进制

少年壮志无烟抽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  244 随笔 :: 0 文章 :: 3241 评论 :: 14 引用

还是从一个例子里看看EMF的使用方法和作用吧。假设我们的应用是一个网上商店,在系统里有这些对象:商店Shop、类别Category、 商品Product,其中类别可以包含子类别。现在我们用EMF从头到尾生成一个可以管理类别和商品的应用程序。如果你的Eclipse里还没有安装 EMF,在eclipse.org/emf下载适合你Eclipse版本的EMF SDK,建议你下载全部包含的那种。安装后,在新建对话框里会增加EMF的类别,如图1所示:


图1 新建向导里的EMF类别

其中“EMF Model”是从已有的模型文件创建genmodel模型,这个模型是专门用来生成代码的;如果你手里已经有一个模型(比如一个.mdl文件或是一个.xsd文件等等),可以选择新建“EMF Project”,这样在向导的后面部分里会要求提供已有的模型文件;因为我们打算自己从头开始建立这样的模型,所以选择“Empty EMF Project”,和建立普通插件一样,要提供一个插件名称,我们为这个商店项目起名为com.my.shop,然后按Finish即完成向导。目前这个新建立的 项目里还没有包含任何代码,只是在META-INF/MANIFEST.MF文件里定义了对EMF相关插件的依赖。

下面开始定义ecore模型,我比较喜欢图形化的方式,因为看起来很直观,所以我使用Omondo公司的EclipseUML插件来画类图,这个插件的免费版本在 它们网站下载,注意下载适合你的Eclipse的版本。当然rose也不错而且更加稳定,但它 不是免费的,而且只能在Windows里使用。和Rose不同,EclipseUML对EMF有特别的支 持,安装这个插件后,我就们可以在项目里新建一个“EMF Class Diagram”,这样会同时创建一个.ecd文件和一个.ecore文件,EclipseUML编辑的类图信息会保存在这两个文件里,前者主要是图形方 面的内容,而后者是真正的模型信息,注意这两个文件中的任何一个都不要搞丢了,最好能经常备份一下。

在EclipseUML里编辑类图很简单,需要注意的是,两个对象之间如果有关联,要仔细考虑关联是否为“包含”关系(一般在UML中以黑色菱形表 示),如果一个类没有包含在任何其它类里,则这个类的实例不会被保存到文件。例如图2中Category包含在Shop中,Product包含在 Category中。这样,所有的对象都直接或间接的被Shop对象包含。换句话说,如果以Shop作为“根”,所有的对象都可以被保存到文件里。

EMF对java基本类型和一些常用类做了包装,例如int->EInt,java.lang.Integer->EInteger以 及java.util.List->EList等等,所以在定义类的属性时要使用这些EMF的类型,当然也有办法使用自定义类型(以后会用到)。我 们例子里的模型相当简单,一共只有三种业务对象(为了更加直观,我们增加了一个NamedElement接口),现在网上 商店类图的第一个版本如图2所示。


图2 网上商店类图(版本1.0)

接下来就要生成代码了。EMF使用JET利用模板生成代码(前面曾介绍过JET),所以要把ecore模型转换为可以被JET利用的genmodel模型,具体的操作是按 ctrl+n新建一个EMF Model,在这个向导的第一步指定名称shop.genmodel,第二步选择从ecore模型导入,第三步选择ecore模型文件 (shop.ecore),这样就建立了缺省的genmodel模型,在这个模型的基础上还可以做一些定制工作,例如每个属性的描述信息等等。

有了genmodel模型,离得到可用的java代码就只有一步之遥了。打开shop.genmodel文件,在根节点上点开右键菜单(见图3),如果只想生 成模型代码选择“Generate Model Code”,如果需要.edit的代码(EMF提供的一些ItemProvider和AdapterFactory,帮助实现编辑器)和可用的编辑器,选 择“Generate All”最方便,这也是例子里选择的方式。EMF的代码生成器为模型、.edit、编辑器和测试代码各生成一个插件项目 (com.my.shop/shop.edit/shop.editor/shop.tests),前三个是后者依赖前者的关系。这里插上一句,即使没有 用EMF的项目,也建议把模型和界面使用不同的插件项目分开,这样做有很多好处,主要是灵活性大大提高了。


图3 从菜单里选择生成部分或全部代码

现在可以运行起来看看效果了,注意我们甚至连一句代码也没有写呢。EMF为我们生成了一个新建向导(New Wizard),利用这个向导可以生成新的Shop实例,注意在第三步要选择以Shop类为根类型。编辑器的运行界面如图4所示,它的外观虽然有待改进,但功能已 经足够我们对网上商店里的类别和产品进行编辑了。在以后的帖子里,我们要对网上商店的ecore模型和编辑器的界面做一些修改。


图4 缺省的编辑器界面

posted on 2005-11-13 00:30 八进制 阅读(9696) 评论(65)  编辑 收藏 网摘 所属分类: EclipseEMF

评论

#1楼  2005-11-18 13:50 gady [未注册用户]
期待下一期的
  回复  引用    

#2楼  2005-11-25 15:32 hopeshared [未注册用户]
在装个marlin,呵呵,就可以出来一个图形化的编辑器了,也是一样,一次生成代码
  回复  引用    

#3楼 [楼主] 2005-11-25 17:31 八进制      
嘿嘿,是"merlin"哦。
  回复  引用  查看    

#4楼  2005-12-15 21:31 lixy [未注册用户]
这个例子有源码可以下载吗?在我的ecllipse上找不到emf diagramm,确定是安装了uml的
  回复  引用    

#5楼 [楼主] 2005-12-16 09:34 八进制      
这篇对应的代码没有留下来,下一篇(http://bjzhanghao.cnblogs.com/archive/2005/11/19/280499.html)里有修改过了代码下载。emf diagram是安装omondo的eclipseuml插件以后才可以用的,而不是uml2i,前者依赖后者。
  回复  引用  查看    

#6楼  2005-12-16 14:42 lixy [未注册用户]
文中给的eclipseuml的链接地址无法下载,现在还有有效的下载地址吗?刚开始用ecllipse,很感谢你的文章
  回复  引用    

#7楼 [楼主] 2005-12-16 16:19 八进制      
应该是暂时现象,blog的空间放不下那个插件,过一段时间再访问那个地址试试吧。或者google一下,用0927的版本就可以。
  回复  引用  查看    

#8楼  2006-01-03 17:14 xiaominghu [未注册用户]
为什么用你的方法形成的code都报错,

在manifest.mf 中

Export-Package: ,
.impl,
.util

报错

而每个java file中
package ;

import org.eclipse.emf.common.util.EList;

都报错. 是什么原因,谢谢

  回复  引用    

#9楼 [楼主] 2006-01-03 20:19 八进制      
错误信息是什么?EMF SDK是否安装正确,版本应该是2.1.0或以上。
  回复  引用  查看    

图4根SHOP下的子类别都是手动添加的吗?
我是照着IBM的那个文章
(http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecemf1/)
做了一边,也是用EclipseUML
运行成apllication也没出错,但根Forum下添不了东西,右键没有Sibling/New Child
不知问题出在何处

  回复  引用    

#11楼  2006-03-16 20:56 katze [未注册用户]
请问EclipseUml可不可以实现包合并的问题? 或者你知不知道有哪些UML工具可以解决这个问题,谢谢
  回复  引用    

#12楼 [楼主] 2006-03-16 21:06 八进制      
包合并是指什么,能具体说一下吗?
  回复  引用  查看    

#13楼  2006-03-18 22:44 katze [未注册用户]
不好意思,包合并是我自己翻译的,不知道对不对,英文是package merge,
A package merge is a relationship between two packages,where the contents of the target package is merged with the contents of the source package through specialization and redefinition.
我已经找到一个免费的软件VP SUITE,但是我的导师要求是在eclipse 中开发一个元模型,好象eclipseuml 没有这个功能,因为我刚刚才接触eclipse,请问eclipse 中 EMF行不行,谢谢

  回复  引用    

#14楼 [楼主] 2006-03-19 18:28 八进制      
看起来eclipseuml没有提供这样的功能,因为我找不到在哪里可以指定这些specialization和redefinition。
  回复  引用  查看    

使用emf,通过load一个xsd文件,建立了三个插件
使用其生成的编辑器编辑,得到的结果文件类似
<mapping:a>
<b>
</mapping:a>

但不知在那里修改代码,可以达到下面的效果
<mapping:a>
<mapping:b/>
</mapping:a>

我修改ecore文件没有用
,不知道有没有别的地方可以指定?请教一下,谢谢

  回复  引用    

#16楼  2006-03-23 22:25 拓跋 [未注册用户]
学习了八进制兄的文章,shop下面的类是自己加的。
也试了IBM的例子,可以运行。 你的问题,Forum下面不能加子类,在于EMF 类图没有画准确,可以对照着图二再画一遍就好了。
八进制兄的文章题的大多是关键点。 如果要一步一步走的,可以参照IBM的例子,更详细些。

  回复  引用    

#17楼 [楼主] 2006-03-24 10:34 八进制      
emfbeginner: 从xsd导入的模型编辑器输出的模型实例是遵守这个schema的,如果修改为mapping:b会不会导致xml validate失败?我对custom serialization没有什么研究,在新闻组里找了一下,你可以看看生成的YourModelResourceFactory这个类。

Hi,
When your code is generated from an XML schema, EMF creates a resource
factory that will produce valid xml files according to this schema - look
for the class <YourModel>ResourceFactory in the util package.

All you need to do is to register this factory as the one that will create
your objects.

Regards,
Marcelo.

<NadavGolbandi@gmail.com> wrote in message news:cmu3bi$avo$1@eclipse.org...

>> I have a simple application that use EMF for the model side. By default
>> the resources serialized into xmi artifacts. I would like to serialized it
>> into XML. I would like to know if it is possible and if so how.
>> Currently my model generated from Rose diagram but I could represent it by
>> a XML schema if it is necessary.


拓跋:谢谢你对SiberiaViper提问的回复,我自己由于时间关系对有些问题无法了解得十分仔细,谢谢这些热心的朋友:-)

  回复  引用  查看    

#18楼  2006-04-19 18:01 123654 [未注册用户]
请问图4的my.shop是怎么生成的?从图3点generate all后我怎么找不到哪里有生成my.shop的方法啊?高手指点一下啊
  回复  引用    

#19楼 [楼主] 2006-05-12 10:40 八进制      
generate all以后生成了可以运行的代码,运行以后,在runtime-workbench里通过新建向导(名为"Shop Model")就可以创建图4中的shop模型了。
  回复  引用  查看    

#20楼  2006-05-12 17:50 fh [未注册用户]
我用generate all后生成的如下代码:

package .provider;
import .Category;
import .Factory;
.....

Eclipse编译不了,怎么办?我的EMF是2.10的了!

  回复  引用    

#21楼  2006-05-23 00:39 qbt [未注册用户]
请问八进制,
我装的eclipse3.1.0, 第一次装eclipseuml的时候可以打开别人的模型文件, 前几天重装系统后, 装了跟以前一样的eclipseuml, 但是打开自己的ecd文件就报:
This diagram can be used only by the creator. It is forbidden to share diagrams using the Free edition.

请问这是为什么?

  回复  引用    

#22楼  2006-05-23 00:55 qbt [未注册用户]
解决了,
在*.ecd文件里ClassDiagramEditModel标签的KEY值保存了创建机器的值, 自己创建个ecd文件, 在把这个文件的KEY值覆盖到不能打开的ecd文件里...搞定!

  回复  引用    

#23楼  2006-06-22 05:01 steinn [未注册用户]
谢谢八进制的例子,我都照样画葫芦做了.
弱弱的问一句, 想要把这生成的 *.editor 导出成文件 , 当成eclipse 的 插件使用行吗, 我试了 File->Export...->Deployable 生成 *.jar文件, 然后保存在eclipse的 plugins目录下, 但是好象不好用.

  回复  引用    

#24楼 [楼主] 2006-07-03 23:41 八进制      
当然可以,导出方法就是你做的那样。
  回复  引用  查看    

#25楼  2006-07-26 23:05 sjj [未注册用户]
generate all以后生成了可以运行的代码,运行以后,在runtime-workbench里通过新建向导(名为"Shop Model")就可以创建图4中的shop模型了。

找不到啊,赐教!!:)

  回复  引用    

好。我是新手。想请问一下:这里的“业务对象” 指的是单纯的业务实体那还是包括具体的业务方法的对象?如果是指单纯的业务实体,那么业务方法的类在哪里那?
  回复  引用    

#27楼  2006-08-29 07:13 杨应敏 [未注册用户]
你们好,

我是EclipseUML主要作者。 我也是Omondo的主要创始人之一,从始到终任职CTO。 今年五月,我们分家了。带着共享版权,我开了我自己的公司http://www.soyatec.com. 正在推出同样产品叫eUML2. 免费版的功能比EclipseUML还要丰富.

原使用者可从此网址下载:
http://www.soyatec.com/euml2/installation
(英文版)

如有问题, 在此告知.

国内子公司是: 深圳市松亚科技有限公司. 急需大量懂Eclipse技术人员来开发新产品. 如有应聘者.请联系: an.yang@soyatec.com

杨应敏

  回复  引用    

#28楼  2006-09-22 16:31 kanfu [未注册用户]
如果我想生成
<product name="理光" price="200.0">some descriptions</product>
UML图应该怎么画?
用uml图生成的xml都没有带中间的文字,或者改代码?

  回复  引用    

#29楼  2006-10-05 14:58 xinshou [未注册用户]
请问各位高手,为什么我的EMF插件解压后,放到ECLIPSE目录下,新建对话框里没有EMF呢?
我用的是ECLIPSE3.2.1;EMF2.2.1。

  回复  引用    

#30楼  2006-10-05 16:03 xinshou [未注册用户]
八进制兄能发给我一个UML的安装包吗?现在下不了。
  回复  引用    

是的啊...
下不聊了啊....
不是 淘汰了把?

  回复  引用    

#32楼  2006-12-08 15:47 liuxing [未注册用户]
请问,在类图中如何表示,聚合关系呀, 就是那个空心菱形,,我试了3天了
  回复  引用    

#33楼 [楼主] 2006-12-12 10:14 八进制      
如果你用EclipseUML画类图,就是在两个类之间用聚合工具连一条线。EclipseUML里没有空心菱形,实心菱形表示containment=true即UML里的“组合”,无修饰表示“聚合”。
  回复  引用  查看    

http://www.omondo.com/ 网站 不好用了啊...
请问还在那可以下到啊......

  回复  引用    

为什么用你的方法形成的code都报错,

在manifest.mf 中

Export-Package: ,
.impl,
.util

报错

而每个java file中
package ;

都报错. 是什么原因,谢谢

  回复  引用    

利用向导声称shop实例时,第一步就出现“Problem Opening Wizard: the selected wizard could not be started.”

是哪里错了,谢谢各位达人

  回复  引用    

#37楼  2007-05-30 15:14 chinakite [未注册用户]
为什么我生成的代码运行不了呢,整个过程没发现错误,但是运行时出错
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d7bf8ee, pid=1240, tid=2752
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_09-b01 mixed mode, sharing)
# Problematic frame:
# V [jvm.dll+0xff8ee]
#
# An error report file with more information is saved as hs_err_pid1240.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#

  回复  引用    

#38楼 [楼主] 2007-05-30 21:37 八进制      
看起来像是jdk版本问题
  回复  引用  查看    

#39楼  2008-04-16 08:32 Hi [未注册用户]
请问楼主,是不是现在的最新的EclipseUML 3.3 里没有对EMF有特别的支持了,我找不到这项“EMF Class Diagram”啊,急切盼望解答,谢谢!
  回复  引用    

#40楼 [楼主] 2008-04-16 10:43 八进制      
很久没有用EclipseUML了,如果EMF Class Diagram, EMF Sequence Diagram等等都没有的话,可能是EclipseUML安装有问题(例如没装EMF、GEF或UML2),或是EclipseUML与你的Eclipse版本不符。我猜想它不会去掉对EMF的支持。
  回复  引用  查看    

#41楼  2008-04-16 16:51 Hi [未注册用户]
感谢楼主这么快回复,象你说的,那些选项都没有,现在是下载也是分两个,一个FREE,一个是STUDIO, 每个版都是有三中形式,第一个是个jar的安装文件,选择eclipse文件夹然后安装,第二个是针对vista的,第三个是集成eclipse和eclipseuml插件的,我下的第三个,找不到那个选项,我找了帮助文档,也没有明确找到,可能我那里没做对吧,或是换了我看不懂的方式了吧,请楼主指教,感谢!
  回复  引用    

#42楼  2008-04-16 16:54 Hi [未注册用户]
两个下载地址:
Free:
http://www.ejb3.org/eclipseUML_E330_2007_freeEdition_3.3.0.v20071210_including_eclipse3.3.zip

Studio:
http://www.ejb3.org/eclipseUML_E330_2007_studioEdition_3.3.0.v20071210_including_eclipse3.3.zip

  回复  引用    

#43楼 [楼主] 2008-04-16 17:03 八进制      
我只用过第一种方式的,free版,安装时选择全部安装即可。集成eclipse的应该更容易安装才是。没记错的话,是在“新建”向导里有一个EclipseUML类目,里面就是那些diagram的向导。不知道加-clean参数启动eclipse会不会有用。
  回复  引用  查看    

#44楼  2008-04-17 02:32 Hi [未注册用户]
在2.1版里找到了,3.3版里确实没有,找了文档也没有,可能是换形式了,不懂,所以看出怎么在新版里可视化建模,谢谢楼主!!
可惜楼主不继续研究了,否则可能就碰不上这样的问题了.;)

  回复  引用    

#45楼 [楼主] 2008-04-19 16:55 八进制      
可视化建模也不一定非要EclipseUML不可,用GMF自带的class diagram editor也可实现。其实我感觉用EMF自带的sample ecore editor足够了。
  回复  引用  查看    

#46楼  2008-04-20 18:55 Hi [未注册用户]
非常感谢楼主热心的解答!!!:)
对这片文章里例子的模型有点不明白,为什么让shop,catalog和product都继承namedelement,这样有什么好处吗?还有怎么利用这个模型生成一个实例呢?:)

  回复  引用    

#47楼 [楼主] 2008-04-21 10:40 八进制      
没有特别的好处,只是不用在每个类里再定义name这个属性了,不是必须的。文中最后一个图(图4)显示的就是用这个模型创建的实例(My.shop)。
  回复  引用  查看    

#48楼  2008-04-22 19:49 Hi [未注册用户]
哦,明白了,省略定义了.
我也是找文章做到图三就停了,看你在19楼的解答也没有看明白.
点了generate all后生成了四个包,模型的文件,edit,editor,test,该运行哪一个?我点了run...,选了Eclipse程序,运行了没有反应.:(
楼主能说详细点吗?初学问的问题不要笑话.

  回复  引用    

#49楼 [楼主] 2008-04-24 20:59 八进制      
运行editor那个。你可以找一下eclipse插件开发的文章,应该有介绍怎样运行一个插件程序的。
  回复  引用  查看    

#50楼  2008-05-30 15:03 tiaotiao [未注册用户]
在《Eclipse Modeling Framework: A Developer's Guide》这本书的2.1节里,我看到说可以从ecore模型反过来得到uml模型或者xml schema,我不知道怎么操作才能得到,请大家指点下?
  回复  引用    

#51楼 [楼主] 2008-06-12 21:12 八进制      
先要从ecore生成.genmodel文件(file->new->emf model),然后在.genmodel文件上点右键,在弹出菜单里选export model。
  回复  引用  查看    

#52楼  2008-07-21 10:32 ask [未注册用户]
lz 您好,我最近开始看emf的东西
也遇到了#21的同学遇到的问题
但是他提到的#22的方法我不知道如何做
希望您给指点一下

  回复  引用    

#53楼  2008-07-21 10:49 ask [未注册用户]
我还是ls那位
#22的方法用了之后key值改变了
但是 又出现了新的问题而无法打开
[*******]The shared project "*******" is not supported under the Free license.
其中*******为project名

希望有达人能指点指点

  回复  引用    

#54楼  2009-02-01 12:35 阿水qq [未注册用户]
八进制兄你好, 请问GMF自带的class diagram editor 画图时怎么表示xor关系? 比如 class a 必须要和 class b或c中的一个相连,但不能同时和两个相连的情况要怎么办?
  回复  引用    

#55楼 [楼主] 2009-02-03 12:44 八进制      
我记得UML图里不能表达这种关系吧
  回复  引用  查看    

#56楼 [楼主] 2009-02-03 12:45 八进制      
@ask
你的项目放在cvs里了吧

  回复  引用  查看    

#57楼  2009-02-03 18:27 阿水qq [未注册用户]
--引用--------------------------------------------------
八进制: 我记得UML图里不能表达这种关系吧
--------------------------------------------------------
那能通过在gmfmap里添加constraint或者别的方法来实现吗,有没有什么实例参考一下?谢谢.

  回复  引用    

#58楼 [楼主] 2009-02-03 22:27 八进制      
@阿水qq
可以通过OCL来描述这些constraints。如果你画的class diagram是为了生成GMF应用程序,则OCL写在.gmfmap文件里。请参考这个链接:
http://wiki.eclipse.org/index.php/GMF_Tutorial_BPMN#OCL_Constraints

  回复  引用  查看    

#59楼  2009-02-03 23:38 阿水qq [未注册用户]
--引用--------------------------------------------------
八进制: @阿水qq
可以通过OCL来描述这些constraints。如果你画的class diagram是为了生成GMF应用程序,则OCL写在.gmfmap文件里。请参考这个链接:
<a href="http://wiki.eclipse.org/index.php/GMF_Tutorial_BPMN#OCL_Constraints" target="_new">http://wiki.eclipse.org/index.php/GMF_Tutorial_BPMN#OCL_Constraints</a>
--------------------------------------------------------
谢谢八进制兄

  回复  引用    

#60楼  2009-02-05 07:39 阿水qq [未注册用户]
八进制兄,我在Mapping里写了一个Validation, validate一下没有问题,然后重新生成*.gmfgen,在里面的Gen Diagram AdaptDiagramEditPart里把'Validation Enabled' 那4项也设置了,然后重新生成Diagram Code,一切都正常,可是新工作区进行Validate时,总是显示我写的constrant is disabled,it will not be evaluated. 这会是哪的问题哪?
  回复  引用    

#61楼  2009-02-05 21:54 阿水qq [未注册用户]

八进制兄, 我看到一资料上说是因为缺少org.eclipse.emf.validation.ocl 和org.eclipse.emf.validation.ui, 我在Editor Code即*.diagram项目下的plugin的Dependecies里添加上面两项, 发现只要一添加org.eclipse.emf.validation.ocl 在新开的工作区里就找不到Examples项,也就没办法打开我建立的Editor了, 请问是我操作错误还是别的问题?

  回复  引用    

#62楼  2009-02-06 00:48 阿水qq [未注册用户]
谢谢关注,问题已解决,应该是版本的问题.
  回复  引用    

#63楼  2009-02-06 04:17 阿水qq [未注册用户]
八进制兄再请教一下IBM Model Transformation Framework (MTF)的问题.
不知道你对MTF熟悉不, 有没有ecore模型对应到一个数据库模式例如*.sql的实例? 还有一个疑问就是, 即使写出了从ecore到数据库的rule, 又怎么把它应用到通过ecore所生成的编辑器哪?因为这个编辑器最后保存的两个文件一个是*.程序名 和 *.程序名_Diagram, 都不是Ecore类型的文件阿, 是不是也就不能作为源文件提供给这个rule. 请费心解答一下.

  回复  引用    

#64楼  2009-02-20 15:02 菜鸟爱技术      
楼主你好,我是一个初学者。我使用Eclipse3.3+EclipseUML来重复你的做法的时候,在往类中添加属性的时候遇到了困难,我不知道怎样向里面添加属性,比如Product下的price怎么添加。但是我使用UML class diagram却能够添加。请问这个是为什么呢?
  回复  引用  查看    

#65楼  2009-02-20 19:25 菜鸟爱技术      
@菜鸟爱技术
已经解决了。我的Eclipse版本为3.3.0,换为3.3.2就可以使用右键添加属性了。但是我不明白为什么之前我是不能够使用右键的。

  回复  引用  查看    


发表评论
姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索


相关文章:

相关链接: