OOP中的其他类属性

时间:2012-11-02 15:53:46

标签: oop design-patterns

我有以下问题。

假设我们有第三方软件以下列风格向我们发送交易(atm卡)信息:

  

atm card 4 ** 5048借记42 $。 231 $左。

所以,我已经在每笔交易中扣除了总和,总和左和卡号。

所以我创建了类

class Transaction {
    private String mCardNo;
    private Double mAmount; // Actually. I dont store money as double, but let it be:)
    private Double mSumLeft;
}

出现第二天软件并开始发送信息:

  

atm card 4 ** 5048借记42美元:在Apple Store购买。 231 $左。

而且我认为有关用户购买的地方信息非常棒。 有两个选项:扩展Transaction类或添加新属性“place”。

有一天会添加新软件,现在我必须支持3种类型的消息!

  

atm卡Visa Classic 4 ** 5048借记42美元:在Apple Store购买。 231 $左。

哦,天哪!而且我很确定它将包含超过100种包含唯一数量属性的消息(因为我现在大约有50个!)

那么存储其他属性的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

如果属性的数量变化如此之大,那么您可能应该将它们存储在一个类中(以避免子类的爆炸)作为一系列Map属性中的值,并使用{{标识它们1}}密钥(例如,StringMap<String, Double>等。)

答案 1 :(得分:0)

你可以用这个去几条路线。

  1. 保持您的事务类不变,并将其用作基类,从中继承并为每种消息类型构建新类。
  2. 将您需要的所有属性添加到一个trasaction类 - 您不必在使用它时填充所有属性。
  3. 我个人经常使用第二种方法,更容易跟踪。

答案 2 :(得分:0)

这取决于许多其他因素,例如您如何存储数据,数据是否正常化或不存在差异,数百万次交易还是数百次等等。

但是,仅根据您提供的内容判断,如果您有多种交易变量,那么为每种类型分别设置类可能不切实际。通用事务类是一种更好的方法。但是,选择其中一种方法只是工作的一半。另一半是,无论你选择哪一个,都要确保你从一开始就正确地设计你的课程。这要求您在进行实际设计之前花一些时间来研究交易以及您拥有或将来可能获得的各种类型。在全面解决问题(业务领域)之后,您将能够设计出更好的解决方案。