﻿<?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; OEA</title>
	<atom:link href="http://www.zhoujingen.cn/blog/tag/oea/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>OpenExpressApp架构－信息系统开发平台</title>
		<link>http://www.zhoujingen.cn/blog/1458.html</link>
		<comments>http://www.zhoujingen.cn/blog/1458.html#comments</comments>
		<pubDate>Sun, 03 Nov 2013 13:48:06 +0000</pubDate>
		<dc:creator><![CDATA[周金根]]></dc:creator>
				<category><![CDATA[技术架构]]></category>
		<category><![CDATA[OEA]]></category>

		<guid isPermaLink="false">http://www.zhoujingen.cn/blog/?p=1458</guid>
		<description><![CDATA[软件＝商业＋架构＋过程＋组织，前一阵子谈论的Scrum更多包含的是过程和组织，这 &#8230; <a href="http://www.zhoujingen.cn/blog/1458.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/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>
<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>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>软件＝商业＋架构＋过程＋组织，前一阵子谈论的Scrum更多包含的是过程和组织，这篇主要关注的是架构。</p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/zhoujg/168052/r_%e8%bd%af%e4%bb%b6=BAPO.jpg" width="640" height="394" /></p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200901/2009010717290636.jpg" width="554" height="465" /></p>
<p>作了开发多年，期间也参考了业界一些著名的软件厂商的产品，现在已经开始实现一个适合信息系统的平台，本篇将从总体上介绍一下OpenExpressApp是什么。OpenExpressApp没有创新性的技术，它更多的是将现有技术和产品中有价值的部分引入到一起。</p>
<p>在讲解现在OpenExpressApp的情况前，我先罗列一些开发的选择，这些就如同敏捷的价值观一样，决定了我开发这个框架的总体思路和方向。</p>
<ul>
<li><b>从单项目开发到基于领域工程</b></li>
</ul>
<p>信息系统存在很多共性，而领域工程是解决产品族的一个有效方法，它通过把领域工程和应用工程作为两个独立的开发流程来看待。《<a href="http://www.zhoujingen.cn/blog/1452.html">软件工厂方法</a>》和<a id="ctl03_TitleUrl" href="http://www.cnblogs.com/zhoujg/archive/2009/08/03/1537256.html">软件工厂方法(二）：软件工厂应用</a>中已经介绍过了领域工程的一些知识。</p>
<p>开发架构时，从基于单项目开发到基于领域工程来开发，会考虑到如何快速方便开发，如何做定制化，因为设计的时候就会考虑应用工程时如何通过配置来实现功能。</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200901/2009010717283893.jpg" width="417" height="309" /></p>
<ul>
<li><b>从代码为中心到模型驱动</b></li>
</ul>
<p>基于信息系统的共性抽取，建立一系列的模型（如领域模型、报表、UI等）来表达系统，通过代码生成器生成部分代码或者直接在框架之上运行模型，开发人员更多的关注于编写业务代码，如本篇最下面的编写Command。这样可以从框架级别进行复用。</p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/zhoujg/168052/r_Domain-Specific%20Development.png" width="596" height="436" /></p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200901/2009010717300684.jpg" width="553" height="352" /></p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200901/2009010717294967.jpg" width="250" height="380" /></p>
<ul>
<li><b>从面向数据库到面向对象</b></li>
</ul>
<p>代码中遍布表和记录的操作，还有业务逻辑遍布在SQL中，在处理简单应用时，这无疑是一种快速方便的方法，但是随着系统的复杂化，这将使得可维护性 很差。而面向对象是已经验证的很好解决复杂问题的方法，而系统系统时一旦深入开发就会遇到复杂的业务，所以面向对象的使用将是一种必然。</p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/zhoujg/168052/r_%e9%9d%a2%e5%90%91%e6%95%b0%e6%8d%ae%e5%ba%93%e5%88%b0%e9%9d%a2%e5%90%91%e5%af%b9%e8%b1%a1.jpg" width="627" height="461" /></p>
<ul>
<li><b>软件复用层次</b></li>
</ul>
<p>大家经常在开发软件时会谈到软件复用，我认为从实现来看复用包含以下三个级别：函数/类、模块/引擎和应用包/框架。在开发过程中，我们应该尽量多考虑大粒度的复用元素，在不同层次都关注复用。</p>
<p><b><img alt="" src="http://images.cnblogs.com/cnblogs_com/zhoujg/168052/r_%e8%bd%af%e4%bb%b6%e5%a4%8d%e7%94%a8%e5%b1%82%e6%ac%a1.png" width="463" height="299" /></b></p>
<ul>
<li><b>参考</b></li>
</ul>
<p>在目前设计和实现的过程中，主要参考了ExpressApp Framework（应用框架），MetaEdit+（元模型工具），使用了CSLA作为分布式业务对象框架，Composite WPF作为UI框架，还使用了其他一些代码（如 LiteORM、Flee等）。这些参考的产品本身就含有比较多的思想和模式，建议没有看过的或者简单了解的可以再去研究一下，这样对框架的设计非常有好处。</p>
<ul>
<li><b>Roadmap</b></li>
</ul>
<p>OpenExpressApp不同于以往独立的开发工具和框架，是为业务分析人员、软件设计和开发人员提供的一种集成的开发平台，它基于业务模型驱动开发 指导思想，提供报表、流程、元数据等基础引擎，具有业务建模、领域建模和应用建模等模型，并提供权限、报表等多个通用应用模块。为了支持软件开发，还提供 基于敏捷思想的软件项目管理工具、快速原型工具和测试支持。</p>
<p>简单地说就是使用DSM方法进行模型驱动开发，作为信息系统的开发平台，支持B/S、C/S、Mobile，支持局域网和广域网。</p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/zhoujg/168052/r_OpenExpessApp%20Roadmap.jpg" width="555" height="453" /></p>
<p>&nbsp;</p>
<ul>
<li><b>现状</b></li>
</ul>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/zhoujg/168052/r_OpenExpressApp%20Framework.JPG" width="520" height="342" /><br />
借鉴ExpressApp的AutoUI和扩展的思想，这里的UI层也是通过模型自动生成。<br />
以下为现在的代码组织。OpenExpressApp为框架代码，GIX4开头的为项目组应用框架时写的类库和扩展Command等代码。目前只支持WPF，还不支持B/S。</p>
<p><img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200909/2009091523091160.jpg" /><br />
现状模型只是实现了通过类的属性来实现，还未实现模型编辑器。例如下面在类上定义属性可以自动在主界面生成导航项，双击后可以打开模块，模块界面也是自动生成。现在界面都只是根据模板生成，还不支持通过设计器来设计界面。<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200909/2009091523122613.jpg" /><br />
以下是一个通过在代码中WPFListViewCommand继承下来的一个命令，在命令上写上属性内容后，就可以在界面自动生成按钮，这样开发人员可以更多关注业务逻辑，而不用关注界面的变化了。<br />
<img alt="" src="http://pic002.cnblogs.com/img/zhoujg/200909/2009091523160694.jpg" /></p>
<p>关于OEA更多内容，可以看<a href="http://www.cnblogs.com/zhoujg/archive/2010/02/28/1675183.html">我的电子书 </a></p>
<p>另，现在OEA的<a id="homepage1_HomePageDays_DaysList_DayItem_2_DayList_2_TitleUrl_0" href="http://www.cnblogs.com/zhoujg/p/3357006.html">领域实体框架Rafy2 发布了</a></p>
<div class='yarpp-related-rss'>
<h3>Related posts:</h3><ol>
<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>
<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>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zhoujingen.cn/blog/1458.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
