对象层次设计方法

Posted

技术标签:

【中文标题】对象层次设计方法【英文标题】:Object hierarchy design approaches 【发布时间】:2012-01-26 16:56:10 【问题描述】:

我正在构建一个能够将数据输出为 RSS 格式以及更详细的自定义 XML 格式的应用程序。对于如何创建对象层次结构,我有两种相互冲突的方法。

选项 1 - 根据每种格式 (RSS/XML) 的要求构建层次结构

FeedItem (RSS properties)
    title
    description
    link
^
|

DetailedFeedItem (Detailed XML properties)
    expirationDate
^
|

Article (Detailed XML Article-specific properties)
    paragraphs

尽管此解决方案有效,但感觉对象与它们的视觉要求 (RSS/XML) 耦合。

选项 2 - 基于更一般的抽象构建层次结构:

Item
    title
    description
    expirationDate

^
|

Article
    paragraphs

这种方法对我来说似乎更灵活和简单,但是当我构建 RSS 时,我可能有一些不会被填充的属性(expirationDate、段落)。如果我选择选项 2,我正在考虑创建一个类,例如 RSSMapper,它会采用一个对象并将必要的属性映射到 RSS 格式 - 例如,RSSMapper.mapArticle(Article article)。

你认为最好的方法是什么?

【问题讨论】:

【参考方案1】:

您对选项 2) 的看法是正确的(基本上是 Adaptor Pattern)。

您的域对象应该以某种方式独立于它的使用。使用映射(或适配器)类将模型转换为视图是确保封装和职责分离的最佳方式。这样,如果您想以另一种第三种格式(例如 html?)公开模型,您只需要创建相关的适配器,而无需更改任何现有代码。

【讨论】:

谢谢。我将使用选项 2 并合并适配器模式。

以上是关于对象层次设计方法的主要内容,如果未能解决你的问题,请参考以下文章

李晓菁201771010114《面向对象程序设计(Java)》第六周学习总结

《面向对象分析与设计》阅读笔记3

结构化方法与面向对象方法之比较

设计模式-组合模式

设计模式结构型组合模式

设计模式结构型组合模式