來自OOP範例和從OOP語言移植代碼,我遇到了一個問題,現在通過抽象在OOP中解決,所以我想知道如何處理下面的問題在Go下面的組合而不是繼承。子類型超類型去
在這種情況下,我的ValueObjects(DTO,POJO等)由其他ValueObjects組成。我通過返回json的Web服務調用來填充它們,所以基本上我的函數/方法調用對於所有類型和子類型都是通用的。
我的超類型EntityVO
type EntityVO struct {
EntityName string
EntityType string
PublicationId string
Version string
}
與EntityVO
type ArticleVO struct {
EntityVO
ContentSize string
Created string
}
與EntityVO有它自己的一套獨特的領域
type CollectionVO struct {
EntityVO
ProductId string
Position string
}
我組成的亞型2組成的亞型1調用Web服務來檢索數據並填充這些VO。
早些時候,我有一個函數調用Web服務和填充數據,但現在我複製每個VO的代碼。
type Article struct{}
func (a *Article) RequestList(articleVO *valueObject.ArticleVO) (*valueObject.ArticleVO, error) {
// some code
}
複製相同的代碼,但更改簽名。
type Collection struct{}
func (c * Collection) RequestList(collectionVO *valueObject.CollectionVO) (*valueObject.ArticleVO, error) {
// some code - duplicate same as above except method signature
}
和我有幾個實體,只是因爲我的VO的是不同的,我不得不重複的代碼,並照顧到每一類VO我所。在OOP中,子類型可以傳遞給一個接受超類型的函數,但不能傳入,所以想知道應該如何實現,因此我不會得到重複的代碼,這些代碼在簽名中只有不同的地方?
對於這種情況下的更好方法有何建議?
這聽起來很有希望,我現在按照應該的方式繼續進行這個項目,如果有問題的話,我們很快會回來。 – user2727195