我正在设计一个班级......
有一些关键方法需要传递给它们的对象,或者它们需要能够“获取”一个对象。
所以问题是,你应该使用getter / setter还是直接将对象作为参数发送给方法 - 以使方法正常工作。或者你应该通过构造函数设置对象,如果它们对类正确运行是非常重要的吗?
答案 0 :(得分:5)
如果在没有某个对象的情况下拥有此类的实例没有意义(例如,在没有连接到数据库的情况下构造数据访问类可能没有意义),那么它就是“依赖”,应该是构造函数的一部分。
如果您的班级在没有它的情况下可以存活,或者可以使用某些默认值,那么您可以改为将其作为属性并在使用之前检查它是否已分配。
在大多数情况下,我强烈主张构造函数依赖注入。
答案 1 :(得分:5)
问题不在于它们是多么“至关重要”(根据定义,每种方法都需要拥有所需的数据)。一个更好的问题是他们改变的频率。如果每次调用方法(或者至少可以合理地)它们将是不同的,它们应该是参数。如果预期它们在对象的生命周期(或其中的很大一部分)中通常是相同的,则它们应与对象一起存储。
在后一种情况下,不要只是依赖于用户调用setter。如果它们是必需的,它们应该在构造函数中设置,即使它们可以被setter更改。
答案 2 :(得分:3)
正如您所提到的,您有以下三种选择:
使用getter / setters
您可能知道,get / set将指示对象的状态,在对象生存期内(通常)访问多次。因此,如果你有'CrucialMethod1'到'CrucialMethodN'的场景消耗这种状态,那么可以使用它。此外,这还有助于从外部暴露国家。
用作构造函数的参数
通常,构造函数的参数将“指定”对象初始化的状态。因此,如果您有可能会或可能不会调用'CrucialMethod'的情况,那么这将不是最合适的。
用作方法的参数
这在“CrucialMethod”对传递的参数进行/转换(依赖)的情况下非常有用。这有助于调用方法而不依赖于参数的状态。
你的电话!
答案 3 :(得分:1)
如果要求类正确运行,则应在构造函数中要求它们或将它们放在其中。
至于传入与否。我更喜欢课程可以照顾自己,所以让它完成工作并获得它所需要的东西。