我可以看到在這兩個POJO中共享這些POJO的吸引力,但我認爲最好的選擇是在共享庫中創建一組簡單的DTO,並使用後端和android中的這些DTO。在兩個項目中擁有相同的實際域對象的問題正是你所描述的 - 你在做後端類型的事情,不屬於前端。
的客戶一個簡單的例子(其中一種具有一些交叉在與建築商模式,所以你可以重新使用這些DTO的從一個建設者):
//this is your back end "proper" domain object
class Customer
{
<back end specifics>
...
Customer(CustomerDTO customer)
{
//set Customer fields from the dto
}
CustomerDTO toDTO()
{
CustomerDTO dto = new CustomerDTO();
dto.setName(this.getName());
dto.setAddress(this.getAddress());
...
return dto;
}
}
那麼你的DTO是一個簡單的版本在你的共享庫中,不應該需要傑克遜註釋,因爲它會自動默認只包含你想要在客戶端上的內容。正如你所說的,如果你確實需要一些傑克遜註解,那麼在Android方面很好。這是DTO你會從後端發回:
public class CustomerDTO
{
private String mName;
public String getName()
{
return mName;
}
...
}
雖然仍然有重複結束(正確的域對象和DTO之間),如果你在它必須在後端改變任何東西它確實意味着也改變了DTO以便客戶端看到,因此客戶端保持同步,因爲它使用相同的DTO。
感謝您的回答,但當Android應用向RESTful Web服務發出請求時正在使用JSON。我的問題是服務器和Android客戶端代碼中的底層POJO。我遺漏了JSON部分,因爲我認爲它不相關。 – user3409855 2014-09-04 09:34:42
您需要爲客戶端和服務器「克隆」這些POJO。不要忘記,Android編譯POJO的方式與JDK不同,因此爲什麼JSON是兩種平臺的消息傳輸。 – 2014-09-04 10:23:18