📄 abc.htm
字号:
<p> 核心实体模型有时会有一个1:N关联的子实体,一般可能表达实体的细节,例如:核心模型是订单,那么存在订单条目这样一个细节,一个订单中可能有多个订单条目;如果核心模型是信息,那么存在该信息的多个回复或评论;这样的关联一般存在多个业务领域中。</p>
<p><strong>模型界面实现</strong></p>
<p> 原来,我们以为分析设计阶段无需了解实现细节,分析人员只要闷头做分析UML图,而无需顾及如何具体实现,其实这是一个误区。</p>
<p> Eric Evans在其“领域驱动设计”一书中认为:分析人员负责从领域中收集基本概念;
设计则必须指明一组适应编程工具构造的组件,以及这些组件必须能够在目标环境中有效执行。模型驱动设计(Model-Driven Design)抛弃了分裂分析模型与设计的做法,使用单一的模型来满足这两方面的要求。因此,对于核心模型必须掌握了解其实现细节。</p>
<p> 从另外一个方面来说,中国的客户总是从界面设计来表达他们的意图(如果中国客户能够使用Use Case等UML图来表达他们概念真是不可想象),例如客户会说,我希望有一个界面让我将订单数据输入,然后能够查询符合查询条件的订单。因此,我们的核心模型至少能够顺利地映射到界面实现,相反,这个客户有这样订单界面要求,但是你没有提供一个与之适应的核心实体模型,界面实现将变得复杂,甚至走很多弯路,诞生不少DTO垃圾对象。</p>
<p> 以JdonFramework框架实现为例子,框架提供了围绕核心模型的新增删除修改查询(CRUD)功能以及批量功能的快速实现,尤其CRUD功能实现前提是必须提炼出核心模型,从而其界面设计流程就能通过配置立即实现,这样一步到位实现领域模型到界面的过渡,可以将我们设计核心模型和客户要求的界面需求能够做到完整的统一。</p>
<p> 开源JdonFramework<a href="http://www.jdon.com/jdonframework/download.html?group_id=5298" target="_blank">下载包中message</a>案例实际就是上述核心模型图的一种实现项目,更复杂的项目可以认为是核心模型的重叠和反复使用(从原理上讲,核心模型是四色原型的体现,而四色原型被认为是大部分企业系统的基本组成元素,见[book][UML][Peter Coad]Java Modeling in Color with UML)。</p>
<p><strong>核心模型的选择</strong></p>
<p> 实际项目中,会存在多个核心模型的重叠和覆盖使用,主要取决于你的领域关注重点。</p>
<p> 例如当客户和我们说要做一个旅游网站时,我们必须充分了解需求,它的软件系统重点是哪些功能。如果当他首先说:我需要一个酒店设备的查询系统,因为他的客户对酒店设备非常关注,那么我们可能认为酒店设备是这个领域模型的核心;酒店设备。如果他又进行描述:我需要一个界面,客户在输入酒店资料时,选择多个酒店设备,那么在这样一个关注领域,核心模型实际是酒店,而酒店设备可能成为酒店的一个特征实体属性,甚至是值对象了。</p>
<p> 以进销存系统为例子,在采购系统中,采购单是一个核心实体模型,而原材料是一种辅助实体模型;在库存系统中,入出库单是一个核心实体模型,原材料或成品代表的是一个库存物品概念模型,当需要库存报表查询输出,可以立即计算出来,或将结果缓存起来,缓存起来的结果其实是库存物品对象的状态,可以使用值对象来实现。</p>
<p><strong>核心模型的精练</strong></p>
<p> 当核心模型被定位和确定后,相当于我们抓住领域本质,这时我们可以使用面向对象的概念对模型进行精练细化,实际就是明确对象的属性,确定模型对象的边界,通过反复重构,结合GoF等设计模式,使得我们得模型准确反映本质,从而实现模型的灵活性设计。所有这些,都是数据表驱动设计所不能实现的。那你还抱着数据库建模干什么呢?</p>
<p> 见下章:<A href="http://www.jdon.com/mda/dddcase1.html" target="_blank"><STRONG>模型驱动设计(MDD)之灵活设计(续)</STRONG></A></p>
<p><a href="../trainning.htm" target="_blank"><strong>本站提供DDD领域建模培训 </strong></a></p>
<p>参考资料:</p>
<p><A href="http://www.jdon.com/mda/ddd.html" target="_blank"><STRONG>实战DDD(Domain-Driven Design领域驱动设计)</STRONG></A></p>
<p><A href="http://www.jdon.com/jive/article.jsp?forum=46&thread=27813" target="_blank"><STRONG>面向對象分析實踐過程是什么?</STRONG> </A></p>
<p><A href="http://www.jdon.com/mda/ddd.html" target="_blank"></A><A href="http://www.jdon.com/artichect/state.htm" target="_blank"><STRONG>状态对象:数据库的替代者</STRONG></A></p>
<p><A href="http://www.jdon.com/artichect/dbover.htm" target="_blank"><strong>数据库时代的终结</strong></A></p>
<p><a href="../artichect/javaee.html"><strong>Java EE/J2EE面向对象编程之道</strong></a></p>
<p><a href="http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=ddd" target="_blank"><strong>更多关于DDD讨论</strong></a></p>
<p><a href="http://www.jdon.com/jive/thread.jsp?forum=46&thread=28339" target="_blank"><strong>讨论</strong></a></p>
<!-- #EndEditable -->
<table><tr><td><b>社区热点讨论</b><br>
<IFRAME MARGINHEIGHT=0 MARGINWIDTH=0 FRAMEBORDER=0 WIDTH="300" HEIGHT="290" scrolling="no"
SRC="http://www.jdon.com/jive/query/hotlist.shtml?dateRange=180&tablewidth=300&length=15&count=200"></iframe></td><td valign="top">
<div id=vgad2 ></div>
</td></tr></table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="778" border="0" cellspacing="0" cellpadding="0" height="2" bgcolor="#000000" align="center">
<tr>
<td></td>
</tr>
</table>
<table width="778" border="0" cellspacing="0" cellpadding="0" align="center">
<tr><td height="20" bgcolor="#CAC9BB" align="center">
<p><span class="small"><font color="#555555"><img src="../images/homebottombg.gif" width="749" height="26"><br>
</font></span></p>
</td>
</tr>
</table>
<TABLE width=600 border=0 align="center" cellPadding=5 cellSpacing=0>
<TBODY>
<TR>
<TD align="center"><span class="white"><a href="http://www.jdon.com/my/feed/feedbackAction.do" target="_blank" class="a03">联系我们 </a> | <A href="../aboutsite.htm" target=_blank class="a03">关于我们 </A>| <A
href="#" target=_blank class="a03">RSS订阅</A> |
<A
href="../advert.htm" target=_blank class="a03">广告联系</A> | <A
href="../sitemap.html" target=_blank class="a03">网站地图</A> | <A
class=a03
onclick="window.external.AddFavorite('http://www.jdon.com/','J道'); "
href="#">加入收藏夹</A> </span><SPAN class=nava><br>
</SPAN><span class="white"><FONT
face="Arial, Helvetica, sans-serif">Copyright (C) 2006 Jdon.com, All
Rights Reserved </FONT>版权所有 <font face="Arial, Helvetica, sans-serif">上海解道计算机技术有限公司</font></span><SPAN class=nava><BR>
<a href="http://www.miibeian.gov.cn/" target="_blank" class="a03">沪ICP备05018152号</a> <A
href="http://www.jdon.com/my/feed/feedbackAction.do" target="_blank" class="a03">如有意见请与我们联系</A> <A
href="../jdonframework/index.htm" class="a03">Powered by JdonFramework </A></SPAN></TD>
</TR>
</TBODY></TABLE>
<!-- InstanceBeginEditable name="EditRegion3" --><!-- InstanceEndEditable -->
<div id=gad style="display:none">
<script type="text/javascript"><!--
google_ad_client = "pub-2190557680964036";
google_language = "zh-CN";
google_alternate_ad_url = "http://www.jdon.com/sales/google120x600.htm";
google_ad_width = 120;
google_ad_height = 600;
google_ad_format = "120x600_as";
google_ad_type = "text_image";
google_ad_channel ="4020734308";
google_color_border = "FDFFCA";
google_color_bg = "FDFFCA";
google_color_link = "0000CC";
google_color_url = "008000";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<script language="javascript">
if( document.all.item("vgad") != null )
{
vgad.innerHTML = gad.innerHTML;
}
</script>
<div id=gad2 style="display:none">
<script type="text/javascript"><!--
google_ad_client = "pub-2190557680964036";
google_language = "zh-CN";
google_ad_width = 250;
google_ad_height = 250;
google_ad_format = "250x250_as";
google_ad_type = "text_image";
google_ad_channel ="2020950433";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "3273AD";
google_color_url = "333333";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<script language="javascript">
if( document.all.item("vgad2") != null )
{
vgad2.innerHTML = gad2.innerHTML;
}
</script>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-257352-1";
urchinTracker();
</script>
</body>
<!-- InstanceEnd --></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -