簡體   English   中英

通過“程序到接口”,如何良好的實踐以及POJO中的瞬時對象/休眠對象中的模型如何?

[英]How good practice and how is Transient Objects in POJO / Models in Hibernate Objects through “Program To Interface”?

我正在從事基本的金融/銀行項目。 存在具有不同上下文的“貨幣”,不僅貨幣類型文本,而且我還需要其他操作。

在DB中,我將金額保留為NUMBER字段,在Hibernate中為BigDecimal類型的對象。 假設Transfer是一個映射到表的對象,該表具有兩個人之間的轉賬信息;

@Entity
class Transfer {
    @Id @Column
    private Long id;

    @Column
    private Person from; //mapped personId

    @Column
    private Person to; //mapped personId

    @Column
    private BigDecimal amount;

    //... setters & getters 
}

但實際上; 幾乎總是我需要用Money作為金額,並且需要特殊的toString()方法:asText(),不僅是BigDecimal對象,而且因為我確實需要這個:

Transfer t = dao.getMySpecialTransferObject();
System.out.println(t.money.asText());

但是我仍然直接需要金額,因為我需要對金額進行一些計算。 (我也需要其他實體中的Money類型對象)

現在我想我需要創建一個此類。

class Money {
    private BigDecimal amount;
    //... setters & getters

    public String asText(){
        String textToReturn = "The amount of this money is: " + amount.toString;
        // ... and some locale information and manipulation on textToReturn
        return textToReturn;
    }
}

隨着復雜性的增長,設計模式會說“程序到接口”,那么我想我將把這筆錢作為接口和實現來使用;

interface Money{
    public String asText();
}

class BasicMoney implement Money{
    private BigDecimal amount;
    //... setters & getters

    public String asText(){
        String textToReturn = "The amount of this money is: " + amount.toString();
        // ... and some locale information and manipulation on textToReturn
        return textToReturn;
}

所以我想用“ Money”類型的對象來編輯我的POJO“ Transfer”而不是數量。

@Entity
class Transfer {
    @Id @Column
    private Long id;

    @Column
    private Person from; //mapped personId

    @Column
    private Person to; //mapped personId

    @Column
    // Not anymore: private BigDecimal amount;
    private Money money;

    //... setters & getters 
}

好了,現在是這個問題:

我的POJO“ Transfer”將具有相同的“ Money”類型對象,但數據庫關系如何? Money不是DB中的持久對象,因此我可以使用@Transient批注,但是我仍然需要Money和DB中“ amount”列之間的耦合/關系 我應該如何在POJO上保持這種關系?

注意; 我們正在使用util類(沒有接口或臨時對象)進行這種格式化等操作,但是我不確定這是否是最佳實踐,除非有更好的解決方案,否則我將不再開發util類。

保持您的字段為BigDecimal,只需添加帶有格式化/顯示您的金額的靜態函數的幫助器類即可。 在這種情況下,提取Money接口沒有任何意義,因為您只有“ toString”方法。 請記住KISS原則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM