我有2个类,生成器和处理器。前者生成一个存储为成员属性的ArrayList。后者处理ArrayList。
我的主类实例化每个对象中的一个并调用适当的方法。
什么是更好的做法?
答案 0 :(得分:4)
Processor
是否有理由关注数据的来源,或者请求生成更多数据?如果没有,只需尽可能一般地传递数据 - 例如Iterable<T>
,Collection<T>
或List<T>
。
这样你的代码就不那么紧密耦合,也更容易测试 - 你甚至不必在测试Generator
之前编写 Processor
,如果有的话您的Processor
单元测试存在问题,可能是由Processor
中的错误引起的,而不是Generator
中的错误。
答案 1 :(得分:0)
我倾向于传递生成器,而不是它的属性(通过方法暴露,我假设)。
为什么?我更喜欢将接口和耦合保持在更高的抽象层。通过传递对象而不是属性,我可以在稍后阶段更改生成器,并减少我必须重构的代码部分。
想象一下 - 在某个阶段,您可能不仅希望传递列表属性,还可能希望传递其他内容。通过传递更高级别的对象,您可以限制重构。
当然这完全取决于这个对象的使用范围。如果您决定传递属性列表,是传递列表本身,还是不可修改的副本。
答案 2 :(得分:0)
我想知道为什么这些不是一个对象。如果处理器改变了Generator的状态,那么为什么这个方法不是Generator的一部分呢?更好的封装方式。使用Generator的方法的接口也会给你一些很好的灵活性。 Generator可以有一个Processor接口,您可以传入一个具体的实例来根据需要更改实现。
对象是状态和行为。处理器的组成可以让您坚持这一点,并且仍然可以灵活地更改对数据所做的操作。只是一个想法...
答案 3 :(得分:0)
从设计的角度来看,你应该创建方法
List<YourType> getList()
在Generator类中然后在main中调用它并将结果传递给Processor。
请注意,在这种情况下,发生器和处理器是独立的,彼此不“相互”,因此可以单独修改它们。而且方法返回List(不是ArrayList),因此接口也不依赖于列表实现。
最后一点。该列表是参数化的(List<YourType>
),使其更安全。