2017-01-19 54 views
2

我是一個Java開發者,但我最近開始學習Angular2 /打字稿。我之前和Angular 1.x合作過,所以我不是一個完整的noob :)DRY原則:Angular2 /打字稿和Java後端對象重複

雖然通過一個RESTful Spring Boot後端和Angular2前端的POC工作,但我注意到自己複製了兩側的模型對象很多例如

Java對象

public class Car { 
    private Double numSeats; 
    private Double numDoors; 
    ..... 
} 
在打字稿的興趣和

現在被強類型我想我的前端項目中創建一個類似的對象:

export interface PersonalDetailsVO { 
    numSeats : number; 
    numDoors : number; 
} 

我重複的工作,並不斷在這裏違反DRY(不要重複自己)原則。

我不知道是那裏會對此有更好的方式。我正在考慮代碼生成工具,如jSweet,但有興趣知道是否有其他人遇到同樣的問題以及他們如何接近它。

+2

這不是關於DRYness。你所要求的是用兩種不同的語言編寫一個接口 - 如果你使用純JS,這種情況不會發生。工具建議被認爲是SO的偏離主題,這是應該用工具完成的。如果你在Typescript之後,我很確定沒有太多的選擇,你可以將它們全部google出來,例如jSweet和https://github.com/vojtechhabarta/typescript-generator – estus

+1

是否應該用工具做的是見仁見智的,這是問題的真正的問題,因爲我看到它。人們總是向後彎曲,將問題歸結爲關閉的類別,僅僅因爲這不是他們喜歡的問題。 *您的答案*是使用工具的事實並不意味着要求提供工具建議。 –

+0

感謝回覆的人,但我同意@MarkAdelsberger這個問題並不是每個人都在尋找一個工具,它更多的是尋找意見,或者用其他人如何解決這個問題。 – Schokea

回答

1

有關於這是否違反了DRY原則兩個思想流派。如果你真的真的,真的肯定有一個自然的映射,你總是會適用於綁定每種語言的JSON,那麼你可以說這是重複的工作;這至少是CORBA等技術背後的IDL類型語言背後的思想(但我正在展示我的年齡)。

OTOH也許每個系統(服務器,客戶端,備用客戶端,如果有人爲你寫一個)應該是免費的獨立定義對象的內部表示這是最適合於該系統(鑑於其語言,它所計劃去做等)。

在您的例子中,打字稿肯定不包含所有的定義Java的「等價物」所需要的信息。 ('數字'可以映射到很多東西;打字稿沒有提及訪問修飾符......)當然,你可以通過採用約定來縮小這個範圍,但是我的觀點是,它不是不言而喻會有一個1對1映射。

也許一種語言,更優雅的處理方式與另一引用。也許不能處理循環引用,但另一個可以。也許人們有理由更喜歡對物體更平坦的視角。也許很多事情。所有這一切都說,如果你修改一個對象的json結構,並且你獨立維護每個系統的內部表示,那麼你可能必須在多個地方進行代碼更改以適應該單一潛在的變化。務實地說,如果能夠避免這是件好事。

所以,如果你能想出一個代碼生成器來處理更具表現力的語言的表示來創建表現力較差的語言,或者至少默認使用它,那麼你可能會發現它對你來說並不是壞事項目。

+0

感謝您的答覆......是的,我認爲可以通過將更具表現力的Java語言轉譯爲Typescript文件來完成。我將在稍後的日期更新我的結果。 – Schokea