在二传手中修剪是一个好习惯吗?

时间:2013-11-08 09:46:14

标签: java

我正在进行代码审核,我注意到了这样的代码:

@Entity
@Table(name = "SOME_TABLE")
public class SomeReportClass {

@Column(name = "REPORT_NUMBER", length = 6, nullable = false)
private String reportNumber;

.....
    public String getReportNumber() {
        return reportNumber;
    }

    public void setReportNumber(String reportNumber) {
        this.reportNumber = StringUtils.trimToNull(reportNumber);
    }

}

每当我看到修剪器内部的修剪时,我觉得它不是最清晰的解决方案 - 这个问题的一般做法是什么?

4 个答案:

答案 0 :(得分:3)

如果你知道你总是需要调整值,这个场景将避免代码重复,即。在你的集合之前你必须总是削减并担心你错过了什么。在我看来,这是一个很好的做法,让它在setter

答案 1 :(得分:1)

使用setter除了透明地设置值之外还执行其他操作违反了关注点分离的原则:使用此设计,您可以将设置关注点与<永远交织在一起< em>修剪关注。这一切都很棒且很好 - 只要你100%确定你永远不会在你的程序的整个生命周期中拥有你想要的设置,而不需要修剪。一旦你需要它,这种设计的失败模式是非常可悲的:你将有一个常规的set方法实际上是#34;特殊的&#34;并被迫添加另一个setWithoutTrimming方法,与新程序员的任何理智假设完全相反。

更一般地说,我的选择是使用纯公共字段(Hibernate支持它们,以及Spring,Jackson等),这使得设置它们的语义变得清晰。如果我有另一个问题,比如修剪,那么我使用一个显式调用静态方法(一个纯函数)来进行必要的转换。这导致了清晰明显的设计,没有WAT,例如&#34;为什么getter返回的值与我刚设置的不同?&#34;。

答案 2 :(得分:0)

我觉得只要方法记录清楚,其中的逻辑就可以了。

在一天结束时,您不希望在调用setter之前在代码中执行修剪的位置加载。

如果您以后决定不再需要修剪字符串,则只需进行一项更改。

毕竟,封装的目的是将数据和行为放在同一个地方。

答案 3 :(得分:0)

这段代码没问题。 setter比公共值更可取的原因是你可以在其中引入任何逻辑而不破坏类的接口。我只有一个注释,如果你在setter中修剪字符串,那么你应该总是在getter中修剪它。在你目前的情况下,你有一个问题:

  1. 获取任何空白值
  2. 将其设置回来
  3. 然后再试一次
  4. 第一次和最后一次获得将是不同的。如果可以从外部实体填充表,则可以这样做。