2012-02-16 59 views
2

當我想要稍後保存在磁盤上的數據結構時,我永遠不知道如何正確建模情況。CompilationUnit對象是否有保存自己並編譯到磁盤的方法?

例如,我目前正在研究一個小型代碼生成器。總的想法是,我會在某個地方想要存儲一個類的合格名稱及其相關內容,我稍後想要將.java文件保存到磁盤並通過javac進行編譯。目前還不完全清楚,我會同時執行這兩個操作,即以.java格式保存到磁盤,並通過javac作爲一個操作進行編譯。我想有時候我可能只想將.java文件寫入磁盤而無需編譯。

class CompilationUnit { 
    String qualifiedName; 
    String contents; 
} 

現在,我的問題是如何建模。我應該有一個CompilationUnit作爲參數IFileSystemIJavaCompiler作爲參數,所以每次我有「在我的手」CompilationUnit我有一切需要做這兩個動作,或者我應該嘗試保持該編譯邏輯以外的類,作爲CompilationUnit只是一個數據對象?

一方面,這個OO信念應該保持同一個對象上的狀態和行爲,這將有利於保持限定的名稱及其內容以及將編譯單元寫入磁盤並編譯它的可能性。

儘管這一事實,我就忍不住感到與具有CompilationUnit同時服用IFileSystemIJavaCompiler依賴的想法不舒服,雖然我這是一個有點難以解釋爲什麼它是如此。我的(理想主義者?)的直覺是數據對象應該很容易實例化,並且在那個視圖中,每當我想要存儲一個限定名稱及其一個限定名稱時,它不得不通過IFileSystemIJavaCompiler內容一起。這意味着負責生成這些數據的人也必須能夠訪問IFileSystemIJavaCompiler,這很奇怪。

我不確定我是否真的回答了我自己的問題。

該系統將進行測試,因此正確處理依賴關係問題非常重要。

謝謝!

回答

2

如果你注入服務實體值對象,你最有可能打破Single Responsibility Principle。雖然我不知道這個域的詳細信息,但IFileSystemIJavaCompiler聽起來很像服務對我來說 - 他們不是狀態的對象的一部分,但它可以使用的服務。

+0

是的。感謝我確認我的暫停。 – 2012-02-16 20:11:12

相關問題