我一直在努力解決設計問題,我承認我對OOP和RoR都是新手,所以我相信這將是非常基礎的。我有一個應用程序,我正在閱讀各種格式的文本文件,以解析與撲克牌手有關的信息。所以我有三個實體:在Rails中應該將對象限制爲那些將具有視圖和控制器的對象?
一個文件對象。這存儲文件的名稱和路徑以及其他一些屬性,並具有與從文件讀取相關的功能。這是MVC,因爲我可以添加一個文件並將其自動更新,或者我可以即時解析文件中的信息。
撲克手對象。這實質上只存儲了誰玩牌的信息以及行動和結果。
解析器。這會根據正在讀取的文件的類型讀取具有不同正則表達式模式的外部JSON文件。它還在JSON文件中具有一些基本的狀態機信息,以便從解析器中刪除大量的邏輯。
所以我最初對解析器的感覺是它應該是它自己的對象。但後來我意識到它沒有V或C,所以可能不適合Rails的做事方式。它也沒有任何除文件對象之外的任何對象所需的功能,因此似乎適合於該文件。但與此同時,它與文件對象完全不同,它似乎不適合。我想到了一個模塊,但模塊的重點似乎是,如果多個對象共享一些功能的需要,在這種情況下,只有文件。
因此,它應該是它自己的對象,在文件對象內,還是有一些其他的選擇,我沒有看到?
它不屬於文件對象,但可以將其添加爲文件對象模型中的類函數。即如果Document是文件obect的模型,則可以在Document模型中定義'self.parse_info(info)',以便可以像調用Document.parse_info(json_string)一樣調用它。它將是一個類方法,而不是一個實例方法。 – rubyprince 2011-03-24 08:10:45
對不起,我可以理解,解析方法是File類的一部分,它們將與File實例分開。但我不明白在哪裏文檔模型進來。你是否假設文件應該從文檔繼承?爲什麼解析對於Document而言比文件更有意義,爲了從File類中移除解析,值得擁有一個Document類嗎?我很欣賞這個建議,但我只是想了解.. – 2011-03-24 11:11:33
我假設你將有一個名爲'Document'(或任何你想要的)的模型來表示你的文件,屬性名稱,文件路徑等。'Document'只是我給這個模型的一個名字。 – rubyprince 2011-03-24 11:34:05