﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>掌控生活，加速成长！ &#187; DSM</title>
	<atom:link href="http://www.zhoujingen.cn/blog/tag/dsm/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zhoujingen.cn/blog</link>
	<description>平衡、快乐、高效，成为一个有自我、有目标、有结果的敏捷个人。</description>
	<lastBuildDate>Sat, 19 Oct 2024 13:10:21 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.7.1</generator>
	<item>
		<title>MetaModelEngine：元模型引擎开发思路</title>
		<link>http://www.zhoujingen.cn/blog/2683.html</link>
		<comments>http://www.zhoujingen.cn/blog/2683.html#comments</comments>
		<pubDate>Mon, 14 Apr 2014 12:13:22 +0000</pubDate>
		<dc:creator><![CDATA[周金根]]></dc:creator>
				<category><![CDATA[技术架构]]></category>
		<category><![CDATA[软件产品线]]></category>
		<category><![CDATA[DSM]]></category>

		<guid isPermaLink="false">http://www.zhoujingen.cn/blog/?p=2683</guid>
		<description><![CDATA[在DSM：使用MetaEdit+编写Family Tree Modeling L &#8230; <a href="http://www.zhoujingen.cn/blog/2683.html">继续阅读 <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss'>
<h3>Related posts:</h3><ol>
<li><a href="http://www.zhoujingen.cn/blog/2687.html" rel="bookmark" title="DSM：使用MetaEdit+编写Family Tree Modeling Language">DSM：使用MetaEdit+编写Family Tree Modeling Language </a> <small>在信息系统开发平台OpenExpressApp － 总体架构的由来中说到Meta &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1832.html" rel="bookmark" title="产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲）">产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲） </a> <small>定制化产品相关的话题在软件产品开发过程中比较普遍，也是很多人关心的一个主题，但深 &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1838.html" rel="bookmark" title="如何在OpenExpressApp做客户化工作">如何在OpenExpressApp做客户化工作 </a> <small>很多产品都会遇到客户化问题，也就是在通用产品之上针对一些客户会进行配置和定制工作 &hellip; 继续阅读 &rarr;...</small></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>在<strong><a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.zhoujingen.cn/blog/2687.html">DSM：使用MetaEdit+编写Family Tree Modeling Language</a></strong>中介绍了MetaEdit+的一个<em>家族树模型语言</em>应用示例，通过示例的学习掌握了基本的概念，本篇将介绍一下<strong><a href="http://openexpressapp.codeplex.com/">OpenExpressApp</a></strong>的元模型引擎<strong>MetaModelEngine</strong>的应用思路。</p>
<h1>为何借鉴MetaEdit+思想</h1>
<p>我在<a href="http://www.zhoujingen.cn/blog/1431.html"><strong>软件产品线工程方法 － 四个主要方法原则</strong></a>提到产品线带来的几个好处：减少成本，快速上市，减少风险和提高质量，这些都是我们在做软件产品时都期望达到的。在我以前blog中也有一个软件工厂的图，该图表明了模型驱动开发是支持软件产品线工程的一种方法，所以我会比较关注模型驱动开发。</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200901/2009010717273113.jpg" width="554" height="381" /></p>
<p>在<strong><a id="ctl03_TitleUrl" href="http://www.zhoujingen.cn/blog/2685.html">信息系统开发平台OpenExpressApp － 总体架构的由来</a></strong>中我讲到过MetaEdit+是全球DSM领域内著名的产品，它能够带来产品线中期望的几个好处：<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200910/2009101220552062.jpg" /></p>
<ul>
<li>缩短上市时间，开发生产力能够提高5-10倍</li>
<li>开发人员可以集中设计和关注业务功能，而不必用代码去写所有方面的内容</li>
<li>由于使用的是经过验证的工具，产品质量显著提高</li>
<li>可以完全控制模型和代码生成，而不像MDA方法模型和代码生成固定，不便于特定领域开发<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200901/2009010717294967.jpg" width="191" height="292" /></li>
</ul>
<p>通过以上说明可以看出，我借鉴MetaEdit+的思路是想采用一种模型驱动开发方法来支持产品线工程。</p>
<h1 align="left">元模型引擎对<strong><a href="http://openexpressapp.codeplex.com/">OpenExpressApp</a></strong>平台的支持</h1>
<p>知道MetaEdit+已经好多年了，之前也研究过这个工具，并查看过它的一些资料，也是在OpenExpressApp计划之中的重要组成部分。</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810154685.jpg" /></p>
<ol>
<li>支持<strong>OpenStudio的图形化建模</strong>，让业务人员能看、能做，符合OpenExpressApp让业务人员编写软件的价值主张，通过业务人员更早更多的参与，可以更快的构建应用</li>
<li>支持OpenTool的工具：<strong>快速原型开发工具、图形化自动化测试工具</strong>等</li>
</ol>
<h3>Visual Studio的DSL架构</h3>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072811183260.png" /></p>
<ul>
<li>Microsoft.VisualStudio.Modeling:域模型框架时整个系统的核心，负责管理模型的元素和连接，也就是域类和域关系的实例。</li>
<li>Modeling.Disgrams:设计界面框架建立在域模型框架之上，它负责处理图形符号的显示，包括处理图表、图形、连接器和装饰等元素在设计界面上的显示</li>
<li>Modeling.Validation:验证框架负责执行关于模型元素和连接的验证方法，如果验证失败，它还要负责创建错误对象。它与Shell框架交互，把错误信息显示到Visual Studio的错误窗口</li>
<li>Modeling.TextTemplation:模板引擎负责执行文本模板来生成代码或其他的工件。模板引擎室一个独立的组件，用于执行来自非DSL的模板输入</li>
<li>Modeling.Shell：建模用的Shell负责管理将涉及器集成到Visual Studio中，例如处理工具窗口和菜单名利，以及文件的打开和关闭等</li>
</ul>
<h1>对MetaEdit+的技术借鉴</h1>
<ul>
<li><strong>组件架构图</strong><br />
MetaModel实现步骤：图形编辑器（Diagram Editor）-&gt; 矩阵和列表编辑器（Matrix和Table Editor）-&gt; 代码生成器</li>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717012728.png" /></p>
<ul>
<li><strong>模型架构图</strong>：GOPRR为元元模型层、领域概念为元模型层、产品规格为模型层、实例为系统应用层</li>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717191775.png" /></p>
<ul>
<li><strong>元模型概念GOPPRR：图、对象、属性、端口、关系、角色</strong><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810540736.png" width="525" height="423" />
<ul>
<li>Graph 图：一个独立模型，通常使用图来表示</li>
<li>Objects 对象：图的主要元素，例如例子中的Person</li>
<li>Property 属性：图、对象、端口、角色和关系都可以拥有一些属性描述</li>
<li>Port 端口：定义角色如何连接对象的可能语义</li>
<li>Relationship 关系：让对象连接在一起</li>
<li>Role 角色：连接关系与对象之间</li>
</ul>
</li>
</ul>
<ul>
<li><strong>属性和非属性</strong><br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717002784.png" /></li>
<li><strong>图的组成</strong></li>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717004847.png" /></p>
<ul>
<li><strong>绑定Binding</strong></li>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717023559.png" /></p>
<ul>
<li>
<p align="LEFT"><strong>对象引用图 Decomposition</strong></p>
</li>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810000137.png" /></p>
<h1>实现DSM步骤</h1>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717204763.png" /></p>
<ul>
<ul>
<li><strong>设计领域概念</strong>（参考示例：<strong><a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/zhoujg/archive/2010/07/27/1786003.html">DSM：使用MetaEdit+编写Family Tree Modeling Language</a></strong>）
<ol>
<li>找到领域概念</li>
<li>把领域概念映射到模型概念<strong>GOPPRR：图、对象、属性、端口、关系、角色</strong></li>
</ol>
</li>
</ul>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072717053016.png" /></p>
<ul>
<li><strong>定义领域规则</strong>
<ol>
<li>定义规则</li>
<li>规则例子：【开始】状态不能直接连接到【结束】状态<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810441540.png" />   <img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810462793.png" /></li>
</ol>
</li>
</ul>
<ul>
<li><strong>画标记</strong><br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810473582.png" /></li>
<li><strong>实现生成器</strong></li>
</ul>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072810482522.png" /></p>
<h1>主要技术及初步计划</h1>
<ul>
<li>元模型引擎</li>
<li>图形编辑器</li>
<li>代码生成器</li>
</ul>
<div class='yarpp-related-rss'>
<h3>Related posts:</h3><ol>
<li><a href="http://www.zhoujingen.cn/blog/2687.html" rel="bookmark" title="DSM：使用MetaEdit+编写Family Tree Modeling Language">DSM：使用MetaEdit+编写Family Tree Modeling Language </a> <small>在信息系统开发平台OpenExpressApp － 总体架构的由来中说到Meta &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1832.html" rel="bookmark" title="产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲）">产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲） </a> <small>定制化产品相关的话题在软件产品开发过程中比较普遍，也是很多人关心的一个主题，但深 &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1838.html" rel="bookmark" title="如何在OpenExpressApp做客户化工作">如何在OpenExpressApp做客户化工作 </a> <small>很多产品都会遇到客户化问题，也就是在通用产品之上针对一些客户会进行配置和定制工作 &hellip; 继续阅读 &rarr;...</small></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zhoujingen.cn/blog/2683.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DSM：使用MetaEdit+编写Family Tree Modeling Language</title>
		<link>http://www.zhoujingen.cn/blog/2687.html</link>
		<comments>http://www.zhoujingen.cn/blog/2687.html#comments</comments>
		<pubDate>Mon, 14 Apr 2014 12:12:28 +0000</pubDate>
		<dc:creator><![CDATA[周金根]]></dc:creator>
				<category><![CDATA[技术架构]]></category>
		<category><![CDATA[软件产品线]]></category>
		<category><![CDATA[DSM]]></category>

		<guid isPermaLink="false">http://www.zhoujingen.cn/blog/?p=2687</guid>
		<description><![CDATA[在信息系统开发平台OpenExpressApp － 总体架构的由来中说到Meta &#8230; <a href="http://www.zhoujingen.cn/blog/2687.html">继续阅读 <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss'>
<h3>Related posts:</h3><ol>
<li><a href="http://www.zhoujingen.cn/blog/2683.html" rel="bookmark" title="MetaModelEngine：元模型引擎开发思路">MetaModelEngine：元模型引擎开发思路 </a> <small>在DSM：使用MetaEdit+编写Family Tree Modeling L &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1832.html" rel="bookmark" title="产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲）">产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲） </a> <small>定制化产品相关的话题在软件产品开发过程中比较普遍，也是很多人关心的一个主题，但深 &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1838.html" rel="bookmark" title="如何在OpenExpressApp做客户化工作">如何在OpenExpressApp做客户化工作 </a> <small>很多产品都会遇到客户化问题，也就是在通用产品之上针对一些客户会进行配置和定制工作 &hellip; 继续阅读 &rarr;...</small></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>在<strong><a id="ctl03_TitleUrl" href="http://www.zhoujingen.cn/blog/2685.html">信息系统开发平台OpenExpressApp － 总体架构的由来</a></strong>中说到MetaEdit+是全球DSM领域内著名的产品，<strong><a href="http://openexpressapp.codeplex.com/">OpenExpressApp</a></strong>将借鉴它的思想来形成自己的模型引擎，本篇介绍一下如何使用MetaEdit+来建立一个家族模型语言，这个也是MetaEdit+提供的一个示例，通过家族树语言的生产来加深对MetaEdit+的了解。如果你也想开发自己的建模工具，那么推荐你也去研究一下。</p>
<h1>MetaEdit+下载</h1>
<p>去官方网站<a href="http://www.metacase.com/">MetaCase</a>下载<a href="http://www.cnblogs.com/zhoujg/admin/Free%2031-day%20evaluation%20version%20of%20full%20MetaEdit+%20Workbench">Free 31-day evaluation version of full MetaEdit+ Workbench</a>，它自带一些示例模型，例如UML示例的一个图的界面如下：</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714175370.png" /></p>
<h1>需求</h1>
<p>对家族树进行建模，图形建模后如下：</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714185026.png" /></p>
<h1>GOPPRR 元模型语言</h1>
<p>再开始之前介绍一下GOPPRR原模型语言。对于家族树图形语言表示如下，在图中标识了多个元类型，每个类型有自己的功能和语义：</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714205150.png" /></p>
<div align="LEFT">Eachmetatype has its function and semantics as follows:</div>
<ul>
<li>Graph 图：一个独立模型，通常使用图来表示</li>
<li>Objects 对象：图的主要元素，例如例子中的Person</li>
<li>Property 属性：图、对象、端口、角色和关系都可以拥有一些属性描述</li>
<li>Port 端口：定义角色如何连接对象的可能语义</li>
<li>Relationship 关系：让对象连接在一起</li>
<li>Role 角色：连接关系与对象之间</li>
</ul>
<p>家族树例子使用这些元类型表示如下：Person为<strong>对象</strong>，Family为<strong>关系</strong>，Parent、Child为<strong>角色</strong>，First name、Family Name为<strong>属性</strong>，没有定义<strong>端口</strong>，整个显示为一张<strong>图</strong></p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714281067.png" /></p>
<h1>实现家族树模型语言</h1>
<ol>
<li>生成对象Person，对象属性如下：<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714334994.png" /></li>
<li>生成标记<br />
在上图Object Tool中点击【<b>Symbol Editor】</b>按钮，弹出标记编辑器界面，生成标记如下：<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714455340.png" /></li>
<li>生成关系Family<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714503798.png" /></li>
<li>生成角色Parent、Child<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714572585.png" /></li>
<li>生成图Family Tree<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072714585885.png" />   <img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715012064.png" /><br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715032253.png" />   <img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715051595.png" /></li>
<li>经过上面5步，Family Tree模型语言就轻易地建立起来了，这一步主要是应用模型语言生成家族树<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715102324.png" /></li>
</ol>
<h1>模型演进</h1>
<p>上面只是实现了一个简单的家族树模型，一般模型会随着要求不断演进，对于上面示例我们现在做一下演进：Person区分男性和女性</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715234092.png" /></p>
<ol>
<li>修改Person属性<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715235364.png" /></li>
<li>增加从Person继承下来两个对象：Female和Male对象<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715244679.png" /></li>
<li>增加男性和女性标记<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715242189.png" />   <img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715245987.png" /></li>
<li>修改图（Graph）定义<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715283552.png" />   <img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072715284796.png" /></li>
<li>增加端口，限制连接点<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072716323861.png" />   <img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072716324894.png" /></li>
<li>再次修改Graph定义<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072716333562.png" /></li>
<li>应用模型生成一个家族图<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/201007/2010072716340067.png" /></li>
</ol>
<p>&nbsp;</p>
<div class='yarpp-related-rss'>
<h3>Related posts:</h3><ol>
<li><a href="http://www.zhoujingen.cn/blog/2683.html" rel="bookmark" title="MetaModelEngine：元模型引擎开发思路">MetaModelEngine：元模型引擎开发思路 </a> <small>在DSM：使用MetaEdit+编写Family Tree Modeling L &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1832.html" rel="bookmark" title="产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲）">产品线复用和模型驱动开发（2012中国软件技术大会、中国软件工程大会主题演讲） </a> <small>定制化产品相关的话题在软件产品开发过程中比较普遍，也是很多人关心的一个主题，但深 &hellip; 继续阅读 &rarr;...</small></li>
<li><a href="http://www.zhoujingen.cn/blog/1838.html" rel="bookmark" title="如何在OpenExpressApp做客户化工作">如何在OpenExpressApp做客户化工作 </a> <small>很多产品都会遇到客户化问题，也就是在通用产品之上针对一些客户会进行配置和定制工作 &hellip; 继续阅读 &rarr;...</small></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zhoujingen.cn/blog/2687.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
