1

我有以下问题。

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

atm 卡 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 卡 4**5048 借记 42 美元:在 Apple Store 购买。231 美元左。

而且我认为获得有关用户购买地点的信息真是太棒了。有两种选择:扩展 Transaction 类或添加新属性“place”。

有一天新软件加了,现在我要支持3种消息了!

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

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

那么存储附加属性的最佳方式是什么?

4

3 回答 3

1

如果属性的数量变化很大,也许你应该将它们存储在一个类中(以避免子类的爆炸)作为一系列属性中的值,并用一个键(比如,,等)Map来标识它们。StringMap<String, Double>Map<String, Integer>

于 2012-11-02T16:22:23.340 回答
0

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

  1. 保持事务类不变并将其用作基类,从它继承并为每种消息类型构建新类。
  2. 将您需要的所有属性添加到一个事务类中——您不必在使用它时填充所有属性。

我个人更经常使用第二种方法,它更容易跟踪。

于 2012-11-02T16:01:24.823 回答
0

这取决于许多其他因素,例如您如何存储数据,数据是否被规范化或没有任何区别,会有数百万笔交易还是数百笔交易等等。

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

于 2012-11-02T16:21:46.633 回答