【问题标题】:how to avoid storing different type of objects in the same place when they represent the same but with a different data structure当它们表示相同但具有不同的数据结构时,如何避免将不同类型的对象存储在同一位置
【发布时间】:2010-01-14 13:20:20
【问题描述】:

在我看来这是一个抽象的问题,希望我能解释清楚。我碰巧在一个完全不同的项目中发现了同样的问题,现在我又遇到了,如果可能的话,我想避免它。

我正在创建一些类来简化某些任务,以满足我们在工作中的某些项目中的某些特定要求。

我有一个创建对象的类,它将 web 控件中的值映射到与此类似的对象属性

http://msdn.microsoft.com/en-us/library/aa478957.aspx

我遇到的问题是有时我必须将非容器对象存储在一个位置(在对象的属性中),有时我必须将容器对象存储在同一个位置以存储 webcontrol 的值(webcontrol有时可以保存多个值,例如复选框列表)。我根本不喜欢这个,因为前一段时间在非商业编译器中工作时,在解析和生成中间代码时,我有时不得不将容器存储在一个地方,有时我不得不将一个非容器存储在同一个地方,并且不得不在代码的其他部分询问您正在阅读的是这种类型的对象,还是另一种类型的对象,这真的很烦人,它会弄乱代码。有什么建议可以避免这种情况,或者有时什么都不能避免?

【问题讨论】:

  • 我正在寻找一种通用方法,而不是针对特定项目和语言的方法。我想你是说这个问题没有通用的方法。在这个项目中(本质上我在一个完全不同的项目中遇到了同样的问题)存储在本文中的第 5 个代码块 msdn.microsoft.com/en-us/library/aa478957.aspx 必须以其他方法读取。我不想编辑消息并在那里发布代码,因为我会得到我当前项目的具体答案。如果答案必须具体,那么我已经有了答案,没有通用的方法

标签: asp.net python algorithm design-patterns ironpython


【解决方案1】:

这就是多态问题。

“有时我必须将非容器对象存储在...对象的属性中,有时我必须将容器对象存储在同一个地方”

你有两件事应该被做成多态的。

解决此问题的最简单方法是始终使用容器。当您想要存储单个非容器对象时,您将其“包装”在仅包含一个对象的容器中。

那么你总是有容器。有时容器有一个对象,有时它有多个。

【讨论】:

    【解决方案2】:

    我不确定我是否理解你的问题,但也许Visitor pattern 是你要找的?

    【讨论】:

    • 您熟悉网络上流行的用 cPython 制作的 mini-c 到汇编器编译器吗?您引用的访问者模式与该编译器的上层使用的相同吗?
    • 可惜我不熟悉
    【解决方案3】:

    对我来说听起来像是复合模式。 Composite 将为对象容器和叶对象(非容器)提供一个接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2022-01-12
      • 1970-01-01
      • 2015-09-04
      相关资源
      最近更新 更多