作爲一個例子,我們考慮GPS和地理(GIS)實體的領域。OOAD - 文件格式 - 讀者類與對象模型類:哪個應該取決於哪個?
我們將有意義的地理實體(點,路徑,區域)建模爲以任何期望的編程語言中類,和這些類將是一個概念上的「免費實現-」這些實體的表示。
在另一方面,也有很多的文件格式保存這些功能或多或少相同的含義。在GPS領域最常見的文件格式是GPX,KML,Shape文件,WellKnownText等
假設,那麼,我想創建一個GpsFeatureCollection
類將包含一個Points
性質,Paths
財產,等等。此外,我會實施類如GpsReader
,KmlReader
,ShapeFileReader
(及其各自的Writer
s)等。
的問題是:
這是OOAD的最佳實踐:
- 有一個
GpsFeatureCollection
實例化一個FileFormat(Reader/Writer)
類? - 有一個
GpsFeatureCollection
實現Read/WriteFromFormat
方法,而不是類的? - 讓每個文件格式的閱讀器來實例化一個空
GpsFeatureCollection
,從文件中讀取數據填充它,然後通過填充對象作爲返回值? - 有一個階級的調停,以避免
FileFormatClass
和ObjectModelClass
之間的依賴? - 以上都不是?
- 「嗯,這取決於......」
我在做「正確的事」很感興趣。我目前的計劃是使用Python,但很可能這對其他語言也很重要。這在目前我的寵物項目造成一些「分析癱瘓」 ......
這是純金!非常感謝你。作爲一個唯一的建議,我將命名接口IReader和IWriter(但不包括IGpsFeatureCollectionReader等:P)。再次感謝! – heltonbiker
很高興你喜歡它。 Java人不會使用前綴「I」作爲接口,儘管我不介意只要一直使用它就會使用它。 –
作爲一個附註(現在我吃午飯了,我的大腦又在工作了),另一種可能的設計就是擁有一個'GpxFormat'類,使用'read'和'write'方法來爲公共使用接口。然後,相同的類可以實現很多可能會被IO方法重用的樣板/特定於規範的代碼,並且'FileFormat'類可能只是一種文件處理程序,作爲任何方法的參數傳遞。 – heltonbiker