元模型驱动(二)构建元模型ーGME 构建分层模型
第 2 课
构建一个分层模型
2.1 入门课程 2 2.2 创建一个递归层次结构
2.3 归类 入门课程 2
第 1 课里面创建的网络元模型用于创建一个相对较小的网络两个路由器和主机组成时,是一个有价值的工具,但是随着图中的设备数量增大,这个图表将变得更加复杂,并最终失去它的可用性。
幸运的是,网络通常由几十个甚至数百台设备组成的大小不等的网络。大型网络通常具备不同的部分。其中机器比起网络的其他部分更紧密相关。同时,很有可能所有这些设备,至少有一些将是相同的(从网络设计角度来看),比如一些相似的个人电脑部门。
这些观察结果阐明了两种克服复杂性的基本方法。首先,存在一个自然分割方式,使我们能够将单图转化为层次不同的子程序框图。其次,我们可以使用集群,或者将一组类似的对象组合成一个单一的单元。
2.1 创建一个递归层次结构
层次分解是代表对系统的子程序框图的创建。和在更高一个层里面插入一个子程序框图。举例说明,如果一个公司在世界各地有不同的办事处,每个办事处都代表一个子程序。而高级图表只包含办事处的一个对象。如果组织规模足够大,还可能包含一些中级水平的办事处(如区域或国家级别的办事处)。
递归显示如果一种(子)图可以容纳相同类型的类似图,即可以出现递归。在大多数情况下,这是不可能发生的。图或者容器单位,通常绑定到层次结构的特定级别。例如,一个国家总部,几乎总是由一个区域中心分级机构或其国家的总部监督。然而对非传统的和更合乎逻辑的工程师和计算机专家来说,队规是一个关键的技术,提供简单性和可扩展性。即使一个特定的应用程序只跨越几个层次,他也是非常有用的几乎没有限制的架构设计。
构建一个层次结构很容易,但是却并不容易构建一个好的层次结构。在一个好的层次机构中,对象通常只和同一容器中的对象或相邻的容器相关;跨层次连接是非常罕见或者不存在的。一个良好的层次结构的例子是一个传统的军事组织,或一巨型的橡树。另一方面,网络显示许多半层次结构。网络往往有很多交叉连接,以提高距离很容错能力,但在大多数的上游,下游方向位置可以很容易的确定。
半层次结果关系的问题,在这种情况下,网络连接在网络域。假设我们指定一个连续的以太网络作为一个子程序。在这里,这个网络的路由器应该表示在子图里或者在更高层次的图中,或者两者都是。换句话说,我们的两个实体,通过互相交叉的路由器,网络(子网),是想绘制子网边界,还是作为点呢?哪里作为外部访问的连接点(即端口)?
这种”从哪里作为切面”的问题往往是建立一个层次结构的主要问题。一个比较有启发的做法是在该点放置一个限制约束,满足内部和外部的条件,要求他们是相对简单的原子(Atom)实体。在这个模型里面,路由器的端口是比较精细的结构。在网络上建立边界似乎是最好的注意。因此下面的规则建立分层建模范式:
所有的设备(路由器,主机和其他对象将在后面介绍)只分配给一个图,这就是所谓的父类图,他们在其他地方是不可见的(向上和向下的层次结构)
网络也被分配给一个父类图。他们在上层次图中是不可见的,如下所示,他们只能从更详细的子程序框图中间接可见。
子程序框图将容纳一个新对象,一个网络访问类型"边界",边界是位于高层次图网络的典型代表。边界在相同的子图中可以连接到其他设备,但它们也可以从外部可见。外围图包含边界的子程序框图,并且有表示边界和他所代表的网络之间关系的关联。在 GME 中,边界被定义为子图的实体的接口和相应的网络结合成一个连接。
在更高层次的框图(一个包含边界的父类图),一个网络和一个子程序框图的边界之间的关系表明网络不是孤立的,而是被连接到上一个低层次的设备。
这是如何转化为元模型的?让我们从第 1 课里面创建的元模型开始。
我们已经有一个实体,命名为 NetDiagram。我们重用 NetDiagram 的子程序的层次结构。我们只需要指定 NetDiagram 可以包含其他任意 NetDiagram 的子程序的层次结构关系的连接(与黑圆点)。注意,我们刚刚添加了一个递归元模型。
2.加入一个新的<<Atom>>实体命名为”Perimeter”(边界)。创建另一个构成对象来表明边界是有效的 NetDiagram 的子类这种关系。记住,边界认为是 NetDiagram 的”端口”(设置端口扮演的是包含关系的角色)。同时不要忘记在面(连接)上添加新的实体的可视化操作。因为边界总是连接到网络的,并有效地代表网络,所以他自己是不需要属性的。啦
3.边界实质上是一个网络的延伸,并扩展到子程。我们将使用下面的图标。在边界属性对话框中设置这些图标。
4.边界和网络有相似之处。最重要的有点,就是设备可以连接他们两个。因此,我们将引入一个通用的周边和网络的泛化概念,命名为”GenNet”。改变从网络到 GenNet 的连接关系,使 GenNet 为抽象类。
5.我们还必须创建一个新的连接实体”NetworkEquiv”,从边界连接到任意网络或任意的边界(在这个例子里,祖父类网络已经有一个包含边界的父类图)GenNet 是这个连接的终点,而边界是源。NetworkEquiv 和 NetDiagram 实体也必须在面中加入可视化连接的操作。
NetworkEquiv 完全不同于过去我们一直使用的连接类型。区别他们的最好的办法是为他们分配一个不同的外观。新的连接属性对话框中设置线类型为”Dash”,颜色为” 0x0000FF”(RGB 的蓝色代码)
图 2.1 更新元模型
我们需要用元模型,所以编译并注册它。我们现在可以测试新层级建模环境。第一个 NetDiagram 是在层次机构的顶层。我们称之为全域。我们的域是属于互联网的两个公司互相连接。现在我们可以手动创建子程序图,或者我们可以借助无层次图(即我们在第 1 课创建的模型 图 1.7)。作为一个子类图,我们可以直接把它拖拽到域。
两个子类图,CompanyA 和 CompanyB,至少需要一个边界,连接到外部(比如互联网)。在内部这些边界的行为就像任何可以连接到他们的网络。CompanyA 也有他们自己的组图,包含所有的工作站,所以二级网络图不是那些 PC(这个问题还有另外一种方法,下一节介绍).
我们已经熟悉了浏览器窗口,但是现在我们要操作多层次结构数据。NetDiagram 模型打开时,不能显示完整的层次结构。他一次最多显示两个层次(图 2.2)。另一方面,而我们想要的是在浏览器窗口中显示尽可能多(或尽可能少)我们希望看到的东西。
图 2.2 三层结构的网络范例图
2.2 归类
服务器,路由器和其他网络设备形成 IT 架构的基础。除了这些对象,通常有多个工作站。在图中这个的工作站是非常重要的(例如计算网络流量),然而,这些机器对于个人来说通常是不重要的。我们更多的专注一些电脑和一个共同的物理位置和类似的网络连接。许多基础设施使用动态寻址(DHCP),这表明其一致性,因为在一个组里地址是随机分配的。
使用新的分层机构建模,我们有一个方法来处理这种复杂性:创建子程序图,为每个工作站创建一个主机将它们连接到边界。将这个 diagram 命名类似”BunchOfOrdinaryPCs”,并把它们作为一个单位,应用于更高阶层的图中。这个方法(见图 2.2)是可行的,但是有几个缺点:
在高层次类图中,子程序只有名称,而没有明确(如网络设备或深一层次的子类图)的表示在这个类图中。
独立的 PC 会增加模型的物理尺寸。
我们应该(可以)有一个更好的图形用来表示 PC
如果所有的 PC 都是相同的,他们没有必要作为一个单独的模型。一个对象就可以代表他们所有属性的重要特性。举个例子,25 台 PC,他们的 IP 地址范围是 192.168.55.10~192.168.55.60 位于纪念大楼的 3 楼。
让一个新的<<Atom>>实体”WSGroup”来代表一个 PC 集群。它看起来非常类似于主机的元模型,除了不同的图标和不同的属性:
一个整数属性:”Number”
两个字符串属性:AddressFirst 和 AddressLast.
一个字符串属性:"RoomLocation"
假定一个用法:<<EnumAttr>>"Workload"选择对象"Light", "Medium", and "Heavy"
一个定制图标
关于 WSGroup 还需要考虑一件事情。WSGroup 可以像主机一样实现 NetInterface 接口吗?幸运的是,NetInterface 没有任何自己的属性(都是直接连接到主机和端口)。然而,这里的 NetInterface 有轻微的语义混乱。到目前为止,它一直代表单个网络接口,但是我们还没有真正正确表示。让我们重新定义(或澄清)NetInterface 接口的语义。现在我们定义它是”连接到同一个网络的一个或多个接口”。NetInterface 到目前为止已经让这种变化定义得足够宽松。现在,根据对我们有利的规则,创建属于 NetIngerface 的 WSGroup 类型的子类。
我们保存这些额外的作业,因为现在已经提供给 WSGroups 连通性的连接关系。一定要保证 WSGroups 包含在 NetDiagrames 中(不要忘记 WSGroup 到面的连接)。
编译并主次元模型,通过 XML 更新 networking 项目。我们现在可以在类图里面添加 WSGroups 类图。图 2.3 显示了一个小公司网络包括几个服务器两个工作站和网络连接的示例。
图 2.3 支持工作站的网络范式图
其实到这里我们就已经能够构建自己的元模型了。后面的章节不再翻译,有兴趣的可以自己去看。
主要是介绍 C 语言来解析模型的。
题外话:这是一个神奇的工具,你也可以用它来构建电路元模型等等。如果有兴趣大家可以在其他领域尝试一下。
版权声明: 本文为 InfoQ 作者【KaYa】的原创文章。
原文链接:【http://xie.infoq.cn/article/0eb972779af6ef3a2d7493e96】。文章转载请联系作者。
评论