我是否应该在一个类中有两个代表几乎相同事物的不同变量
起初,我有一个类 A,它将列表 B 作为构造函数参数。该列表 B 保存在 A 类中的变量中。使用该类 A 的另一个类需要列表 B 中的数据,但方式不同。因此,我创建了一个特定的对象 C,并在类 A 中有一个 getSomething() 方法,该方法根据原始列表 B 中的信息即时创建了这些对象 C 之一。这工作得很好。
然后发现调用 getSomething() 的类需要一些原始列表 B 不包含的额外信息。然而,对列表 B 中的特定元素进行的小计算就给了我这些信息。该信息需要添加到对象 C 中。此计算有点繁重,因此当我在 getSomething() 中创建对象 C 时,我不想即时执行此操作。这给我带来了一个问题,因为我无法使用此计算信息更新对象 C 的任何元素,因为对象 C 的元素尚不存在,它们是在 getSomething() 中创建的。
我应该如何解决这个问题最好的方法。也许有什么模式吗?
- 是否在类A的构造函数中将列表B中的元素转换为对象C的列表,然后丢弃列表B,然后执行计算并更新对象C的所有元素?
我是否同时保留原始列表 B 和对象 C 的列表,并且有两个变量具有几乎相同的信息,只是以不同的方式呈现?
还是别的什么?
编辑:C 不是列表 B 中元素的扩展,它更多的是列表 B 中的一个或多个元素组合成 C。
At first I had a class A that took a list B as constructor argument. This list B was kept within class A in a variable. Another class that used this class A needed the data in list B, but in a different way. So I created a specific object C and had a getSomething() method in class A that on the fly created one of these object C, based on information in the original list B. This worked fine.
Then it turned out that the class that called getSomething() needed a little bit extra information that the original list B did not contain. A small calculation on the specific elements in list B however gave me that information. That information needed to be added to the object C. This calculation is a bit heavy so I do not want to do it on the fly when I create object C in getSomething(). This gave me a problem since I cannot update any elements of object C with this calculated information, since the elements of object C do not exist yet, they are created in getSomething().
How should I solve this the best way. Are there perhaps any patterns?
Do I in the constructor of class A convert the elements in list B to a list of object C and then discard list B, and then perform the calculation and updates all elements of object C?
Do I keep both the original list B and a list of object C and have two variables with almost the same information, just presented in a different way?
Or something else?
Edit: C is not an extension of an element in list B, its more that one or more elements in list B is combined to a C.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您可以对列表 B 进行调整以创建列表 C,而不会丢失类 A 所需的信息(换句话说,如果类 A 可以仅使用列表 C 正常工作),那么是的,在构造函数中计算此值而不保留 B 似乎是好主意。
但是,如果您还需要原始数据,A 类可以保留两者。如果您知道列表 B 和列表 C 中的哪些信息相同,则可以为列表 C 的实例提供对列表 B 的引用,这样它只需存储不同的信息,并且可以引用列表 C 中的信息。当要求一些没有改变的东西时,列出B。
If you can make adjustments to list B to create list C without losing information that class A needs (in other words if class A can function just fine with only list C) then yes, calculating this in the constructor and not keeping B seems like a good idea.
If, however, you need the original data aswell, class A can keep both. In case you know which information will be the same in list B and list C, you can give the instance of list C a reference to list B, so that it only has to store the information that differs, and can refer to the information in list B when requested something that didn't change.
这个解释可能比实际问题更令人困惑。
AFAICT 您想要一个装饰 B,其中装饰列表是在 A 的构造函数中计算的。
它是 B 对象的副本,还是对原始对象(或其他对象)的复合引用,取决于您的实际需要。
The explanation is probably more confusing than the actual problem.
AFAICT you want a decorated B, where the decorated list is computed at in A's constructor.
Whether or not it's copies of B's objects, or a composited reference to the originals (or something else) depends on your actual needs.