2016-03-07 75 views
0

我已經開始在DynamoDB和跨越該指令來到DynamoDBMapper http://aws.amazon.com/articles/0802321832592496正在使用DynamoDBMapper一個壞主意?

讓說我有一個用戶POJO,DynamoDB註釋添加,如:

@DynamoDBTable(tableName = "users") 
public class User { 

    private Integer id; 
    private Set<String> friends; 
    private String status; 

    @DynamoDBHashKey 
    public Integer getId() { return id; } 
    public void setId(Integer id) { this.id = id; } 

    @DynamoDBAttribute 
    public Set<String> getFriends() { return friends; } 
    public void setFriends(Set<String> friends) { this.friends = friends; } 

    @DynamoDBAttribute 
    public String getStatus() { return status; } 
    public void setStatus(String status) { this.status = status; } 
} 

由於POJO是最有可能用於在一個典型的應用程序中傳輸數據,例如從持久層到API層......這聽起來像是一個壞主意,它將它與特定的數據庫技術聯繫起來。

在關係領域,可以使用Java Persistence API註釋,它是數據庫不可知的。但對於DynamoDB,情況並非如此。如果將來數據庫發生變化,我們將需要修改POJO類。聽起來不像是一種好的做法。

那麼應該使用DynamoDBMapper,還是應該使用低級API?

回答

1

JPA的目標是數據庫無關,但任何人誰實際上已經遷移實際的應用程序從一個數據庫到另一個可以告訴你,它不」處理所有的邊緣情況。

雖然您指出DynamoDB註釋特定於DynamoDB是有效的,但它確實具有一些優點,因爲它可以保持您的邏輯持久性不可知。例如,通過不使用註釋,您將不得不在整個應用程序中使用DynamoDB對象作爲Map<String, Object>。通過使用映射器,您可以改爲使用存儲在DynamoDB中的項目作爲User對象,並且您的業務邏輯可以全部在User對象上執行。

現在讓我們假設您需要切換到將用戶存儲在不同的數據庫中......無論出於何種原因,MongoDB甚至是關係數據庫。是的,您必須將User對象上的註釋更改爲適用於您的新持久性存儲庫所需的內容(就像如果您使用JPA,但是從MySQL切換到Postgres,則必須修改其中的一些) ,但是您的邏輯即整個應用程序中的對象User上的業務規則和驗證無需更改。

因此,儘管您必須使用DynamoDB註釋來使用映射器,但您能夠直接在域實體上實現應用程序邏輯所帶來的好處遠遠超過耦合到持久性解決方案的任何顧慮,並且鏡像在我看來,JPA的益處比你聲稱的更緊密。

0

該映射器僅用於創建POJO的唯一目的,您應該使用它。

由於POJO是最有可能用於攜帶在 典型應用,e.g從持久層API層......這 聽起來像一個壞主意,其綁定到特定的數據庫技術,跨層數據。

這是該技術,即使是休眠(一個非常流行的ORM工具)的一個已知的限制已經提供了類似的工具來創建數據庫的POJO,它也有相同的限制,如果您的數據庫不斷隨時間變化你可以創建新的POJO的

我強烈建議你使用DynamoDBMapper

+0

我不知道我可以用dynamodb mapper自動創建POJO。我錯過了什麼? – vuamitom

相關問題