来自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