在给定的域中,可以有多种文件格式表示相似的对象或结构。例如,一个类型的对象Track
(意味着一系列地理点)可以保存为 .GPX、.KML、GeoJSON、WKT、ShapeFile 等。
所以,我的班级Track
应该从文件中读取和保存它的数据,这些文件可以是不同的格式。
问题是:
我的类应该实现从每种文件类型读取的方法(即“了解”它们),还是应该使用其他类,其中每个类都包含与每种文件类型的实现细节进行交互的逻辑?标准做法是什么?
第一个选项的编码如下:
trackCollection.Add(Track.loadFromGPX(gpx_fname))
trackCollection.Add(Track.loadfromKML(kml_fname))
# ...and so on with other filetypes
而第二种选择可能是:
trackCollection.Add(GpxReader.getTrack(gpx_fname))
trackCollection.Add(KmlReader.getTrack(kml_fname))
在我看来,涉及单一职责原则、信息隐藏和类之间的相互依赖的某些特征可能会使一种方法比另一种方法更好,但我没有足够的经验来确定哪一种方法(如果有的话)。