В данном домене может быть несколько форматов файлов, представляющих схожие объекты или структуры. Например, объект типа 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))
Мне кажется, что некоторые характеристики, включающие принцип единой ответственности, сокрытие информации и взаимозависимость между классами, могут сделать один подход лучше другого, но у меня недостаточно опыта, чтобы понять, какой из них, если вообще есть.