【问题标题】:General principle to choose the location of a parameter (attribute) in a class在类中选择参数(属性)位置的一般原则
【发布时间】:2021-02-24 22:24:40
【问题描述】:

你能告诉我一个在类中选择参数(属性)位置的一般原则吗?

例如,我可以有一个类:

class A {
     X x;
     Y y;
     A (X x, Y y) {...}
     void method() {...}
}

使用方法:

A a = new A(x, y);
a.method();

或者我可以上课:

class B {
     X x;
     B (X x) {...}
     void method(Y y) {...}
}

使用方法:

B b = new B(x);
b.method(y);

重新表述这个问题:我应该封装什么以及我应该将什么作为接口的一部分保留?

【问题讨论】:

  • 这完全取决于您的用例。
  • 有些人通过发明这样的规则来赚钱,但对于这种特殊情况,我不知道有任何情况。但也许其他人是。有人吗?
  • 我推荐阅读 Robert Martin 的 Clean Code。对象及其功能应该具有表现力和可读性。重构 SerialDate 的章节很棒。
  • @JohnMitchell 虽然 Martin 先生专注于制定规则,尤其是关于 cmets,但我不知道任何针对这种特定情况的规则。
  • 所以您的问题收到的答案是“视情况而定”。例如;如果您的类应该是不可变的,那么变量应该是最终的并提供给构造函数。如果一个变量是灵活的,那么将其作为方法参数接收是有意义的。

标签: java oop object design-patterns interface


【解决方案1】:

取决于你的类和它的方法,你可以选择最好的模式。

构造函数的重点在于: 在构造函数中只能使用创建实例的强制参数。

例如,在您的代码中,如果在 method 中只需要使用 xy,则将它们放在构造函数中会产生一些问题。在调用method 之前,可以在构造函数中更改它们。如果你在一个团队中工作,其他队友可能会改变初始化属性的方式而不知道它对method函数的负面影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 2019-01-07
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多