【发布时间】:2017-11-12 05:45:18
【问题描述】:
我正在寻找 golang 作为我的 web 后端的新 goto 语言。我目前的语言是 PHP,我在其中实现了一个类似于 Backbone Collection/Model 结构的数据结构。
excursus 集合/模型
这意味着我有一个包含多个Models 的Collection。 Models 有一个 attributes 字典用于存储实际的“公共数据”。 Collections 有多种对Models 数组进行操作的便捷方法(排序、getByIndex、getByMatchingParameter 等)。 Models 也有他们分享的便捷方法。
在日常生活中,将有 90% 的“事物”以相同的方式表示。例如,我可以像存储User 一样存储Address。拥有一个包含我的Addresses 的AddressesCollection,我可以简单地要求我的AddressesCollection 给我所有AddressModels,其中city=Berlin。在我的基类中实现这种匹配,我可以在我的UserCollection 上做同样的事情,给我所有被deactivated=true 停用的用户。
但有时(10%)我需要一种特殊的方法。 getGeoData 为 Addresses 例如。现在,在我的 oop 世界中,我可以简单地创建一个新类,扩展我的 BaseModel 添加我的方法,并在使用我的基类的任何地方使用我的扩展类。
我的“我就是不明白”
这在 Go 中是如何工作的。我阅读了很多关于嵌入/组合的介绍。但根本不要让我的头脑明白这一点。
这就是我的立场,请记住,这是我学习“继承”概念的游乐场,而不是用于生产就绪的集合/模型实现。
我得到的是我还没有“理解”如何编写一个接受不完全继承的类型的“通用”方法。我觉得我必须在某个地方使用接口才能获得这种“继承”/“扩展类”的感觉。但我目前的使用是......嗯......
但也许我完全错误地以这种方式实现我想要的结构的概念?也许有一种更优雅的方式。任何提示都非常感谢!
【问题讨论】:
-
我能给出的绝对最好的建议,我不能说得足够强烈:像 Go 一样编写 Go。 不要试图模仿你在其他语言中使用过的模式.那样只会导致疯狂。
标签: inheritance go data-structures collections embedding