2013-10-28 207 views
0

大家下午好。在java中封裝對象

我在想Java中的一些問題。我工作到現在的所有公司從來不會打擾自己的良好和封裝代碼。因爲我在我自己的腦海中提出了這個問題。

有什麼更好的,微妙的方式來解決一些對象的老問題。

使用getter和setter(不驗證)創建anemics實體,或將相同的對象作爲參數和它們的屬性的新值隨後傳遞。

例:

anemics實體:

public class RenterGrouping implements Serializable { 

    private Integer idRenterGrouping; 
    private String name; 
public RenterGrouping() { 
} 

public RenterGrouping(String name) { 
    this.name = name; 
} 


@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "idRenterGrouping", unique = true, nullable = false) 
public Integer getIdRenterGrouping() { 
    return idRenterGrouping; 
} 


@Column(name = "name") 
public String getName() { 
    return name; 
} 


public void setIdRenterGrouping(Integer idRenterGrouping) { 
    this.idRenterGrouping = idRenterGrouping; 
} 


public void setName(String name) { 
    this.name = name; 
} 

}

或替代的第二種方式(不制定者):

public class RenterGrouping implements Serializable { 

private Integer idRenterGrouping; 
private String name; 

public RenterGrouping() { 
} 

public RenterGrouping(String name) { 
    this.name = name; 
} 


public RenterGrouping updateRenterGrouping(RenterGrouping renterGrouping, Integer idRenterGrouping, String name) { 
    renterGrouping.idRenterGrouping = idRenterGrouping != null? idRenterGrouping : null; 
    renterGrouping.name = name != null? name : null; 

    return renterGrouping; 

} 


@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "idRenterGrouping", unique = true, nullable = false) 
public Integer getIdRenterGrouping() { 
    return idRenterGrouping; 
} 


@Column(name = "name") 
public String getName() { 
    return name; 
} 

這裏的進口實際上是保護對象和他們的屬性。

其他人與方法updateRenterGrouping

等待你的反饋球員。 謝謝你們!

+1

所以你想要一個可能有幾十個參數的方法,它們不會更新對象中的任何值,部分或全部值?不會通過我的代碼審查。 – Kayaman

+1

是否不需要有條件的操作符? – MrBackend

+0

我的字典中不存在貧血症(除了可能指的是貧血症,由於血液或血細胞缺乏導致的疾病...)。請澄清與Java類有關的術語。 – tucuxi

回答

0

看就是調用實體的方法:

public RenterGroupingTO saveOrUpdate(Integer idRenterGrouping, String name) throws Throwable { 

    RenterGrouping renterGrouping; 

    if (idRenterGrouping != null && idRenterGrouping != 0) { 
     renterGrouping = getById(idRenterGrouping); 
     renterGrouping = renterGrouping.updateRenterGrouping(renterGrouping, idRenterGrouping, name); // calls the method 

    } else { 

     renterGrouping = new RenterGrouping(name); 
    } 

    FactoryDAO.getInstance().getRenterGroupingDAO().saveOrUpdate(renterGrouping); 
    return new RenterGroupingTO(renterGrouping); 
} 

它持之以恆自己做這樣的事情:

renterGrouping = getById(idRenterGrouping); 
renterGrouping.setIdRenterGrouping(idRenterGrouping); 
renterGrouping.setName(name); 

Kayaman 假設我們有10個參數,同樣這種方式,我們只需要調用updateRenterGrouping(parameters ...)方法,而不是在每個我們想要在這些屬性中輸入值的地方創建10個setter,並將其更改爲實體。 另一種可能性是:相反,爲每個屬性創建entity.setAtribute(x),我們有爲我們做的方法。

不值得嗎?

+0

如果你想節省代碼,你可以通過反省來節省成本;但是,您將失去編譯時的完整性檢查。在使用內省來設置字段之前,我會建議將這些字段公開並調用一個「persist()」方法。另一方面,大多數IDE可以自動生成getter/setter。是的,它是樣板文件;但它不是/那麼昂貴。 – tucuxi