请教熟悉组合模式(Composite Pattern)的高手!

lyb_abiandbel 2006-04-13 10:23:26
请教各位:
我怎么样把这个XML文件结构用组合模式(Composite Pattern)来表示呢?
<?xml version="1.0" encoding="utf-8" ?>
<ReportTemplate CustomerName="normal" Version="0.92">
<Reports>
<Report FontName="Tahoma" FontSize="12" ReportName="Account" Width="3.9" LeftSpacing="0.1" TopSpacing="0.1" EndOfDayFlag="false">
<Header FontSize="0" FillColor="DarkGray">
<Lines>
<HeaderTextLine FontSize="16" LineTitle="REPORTNAME" TitleWidth="0" DataSource="Account" Format="{0}" />
<HeaderTextLine FontSize="12" LineTitle="Store Name:" TitleWidth="0" DataSource="StoreName" Format="{0}" />
</Lines>
</Header>
<Bodys>
<ReportBody FontSize="0" HeadingHeight="0.25" HeadingFillColor="LightGray" HeadingLines="2">
<ColumnHeadings>
<ColumnHeading FontSize="0" Height="0.25" Width="0.8" FirstLineName="Date" SecondLineName="" HoriAlignment="Left" />
<ColumnHeading FontSize="0" Height="0.25" Width="1" FirstLineName="Transaction Type" SecondLineName=""
HoriAlignment="Left" />
</ColumnHeadings>
<DataColumns>
<Column FontSize="0" Height="0" Width="0.8" DataSource="TransDate" Format="{0:d}" SummaryType="None"
HoriAlignment="Left" />
<Column FontSize="0" Height="0" Width="1" DataSource="EntryType" Format="{0}" SummaryType="None"
HoriAlignment="Left" />
</DataColumns>
</ReportBody>
</Bodys>
</Report>
.........
</ReportTemplate>
...全文
372 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
iegrhn 2006-05-16
  • 打赏
  • 举报
回复
高手与高手的交流
lyb_abiandbel 2006-05-12
  • 打赏
  • 举报
回复
to:zhongkeruanjian(编程亮子)

非常感谢你的回答,帮我加深了对组合模式的理解。
以前我的确忽略了组合模式的递归,不过我想你明白了我的意思,我也明白你的意思了。
呵呵!

分是你的了。
zhongkeruanjian 2006-05-12
  • 打赏
  • 举报
回复
李建忠老师 这个看过。。但是我觉得没有杜震宇的好。。。
zhongkeruanjian 2006-05-12
  • 打赏
  • 举报
回复
递归与组合模式没有必然的联系。。

回到你的问题上来。你的理解是可以的!因为你把他们都看成了一个抽象节点。其他节点继承这个节点。然后统一处理这些节点。这就是强类型的NET的DOM模型。

呵,我想远了,我以为你想把报表做成组合模式。哈哈。
lyb_abiandbel 2006-05-12
  • 打赏
  • 举报
回复
to:zhongkeruanjian(编程亮子)

谢谢你的提醒。
不知道你看过李建忠老师的设计模式视频,如果没有到这里:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/consyscourse/CsharpOOD.aspx
你应该看过吧!如果没有,就当是我谢谢你了。
zhongkeruanjian 2006-05-12
  • 打赏
  • 举报
回复
唉,是啊。这就是国内做NET永远都做不了大事的原因吧。推荐你到www.cnblogs.com去看看,里面有几个研究这方面的高手,比如杜震宇,Terrylee。这里只是灌水乐园。
lyb_abiandbel 2006-05-12
  • 打赏
  • 举报
回复
这里的人好像都在追求使用控件的最高境界啊!
lyb_abiandbel 2006-05-12
  • 打赏
  • 举报
回复
多谢zhongkeruanjian(编程亮子)的点拨,的确我的理解有误,递归的概念在组合模式中很重要,

其实我的疑问是组合模式可以处理这种没有递归概念,但是的确有树型概念的模型吗?
lyb_abiandbel 2006-05-12
  • 打赏
  • 举报
回复
是啊,都这么长时间了,没有人回啊!谢谢你的回答。

正如你所说,组合模式(Composite Pattern)最本质的一个概念是对象集合能表达成一棵树。
但是我的XML中有对象集合的概念阿!

可以有多个reports,
比如,有header有lines
可以有多个bodys,
然后还可以有ColumnHeadings, 有DataColumns

我想统一处理集合对象,应该就是组合模式的应该做的事情吧!

但是,的确没有递归的概念,请问组合模式一定要有递归才能用吗?

你说的

zhongkeruanjian 2006-05-12
  • 打赏
  • 举报
回复
组合模式(Composite Pattern)最本质的一个概念是对象集合能表达成一棵树。

对于你的问题来讲:

1.如果你从XML角度来讲,这个XML文件是可以表达成一个组合模式。比如NET的XML的DOM模型,本身就是一个组合模式。比如XmlNode,就是所有XML节点的抽象基类。然后继承了XmlNode的类比如XmlElement,xmlAttribute都继承它,来表达成一个对象树。
2 但是从业务的角度来讲。你这个Xml表达的是报表模板。从你的XMl中,我没有看到一个报表可以包含子报表集合。所以不是一棵报表树。没有必要用到什么组合模式。

有一点要说的:数据库,XML这些都只是数据存储与交换的一种方式。它们不应该影响到你的类设计。你并不能从它们之中能看到类设计的影子。而且不能被它们所制约。

有没有好处呢?

组合模式的好处很多。比如你的有报表类,里面有很多子报表。那么你的客户应用程序就可以用一致的方式来调用你的报表类的方法。比如Render方法。

这种贴这么人气这么低。。。。唉。。。。NETER怎么对这些都不关心呢????这可是搞软件开发最要追求的东东哦!
Lisbi 2006-04-26
  • 打赏
  • 举报
回复
up
lyb_abiandbel 2006-04-26
  • 打赏
  • 举报
回复
up
lyb_abiandbel 2006-04-21
  • 打赏
  • 举报
回复
组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。


我只是为了练习,我还想问一下,我的XML文件是报表配置文件,在真正的程序中有必要把这个配置文件实现组合模式(Composite Pattern)吗?有没有好处呢?
lyb_abiandbel 2006-04-21
  • 打赏
  • 举报
回复
to:zahuifan(杂烩饭)

能解释一下XMLNode和 XMLProperty分别代表什么意思吗?

具体怎么样实现组合模式(Composite Pattern)的呢?
zahuifan 2006-04-16
  • 打赏
  • 举报
回复
接口为IXMLItem
子类为 XMLNode 和 XMLProperty
XMLNode 可以组合(包含)XMLNode 或 XMLProperty, XMLProperty 不可以组合其他对象。
xjjdanran 2006-04-16
  • 打赏
  • 举报
回复
不懂,学习一下
alanfisher 2006-04-14
  • 打赏
  • 举报
回复
不是很理解楼主的意思,可否将上下文环境说具体一些呢?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧