2013-11-01 55 views
0

我已經通過使用CodeIgniter框架來開發圖書館/圖書管理系統。我對所有這些都很陌生,並且有自己的學習方式,所以如果聽起來像是一個愚蠢的問題,那就耐心等待。PHP/CodeIgniter中的對象和模型有區別嗎?

我到了一個關於概念和設計問題的地步。

我有很多的意見,控制器,大部分的工作,和一個模型。我現在意識到,雖然這是很好的MVC,但它不一定結構良好。例如,有很多關於一個表格/一個模型的參考,等等。

所以我可以很容易地將我的模型分成一個libraries_model和一個books_model。但我不確定的是這樣的:

1)我的books_model是書籍對象(從概念上講)?或者我應該創建一個單獨的「圖書對象」,這顯然使用我的「books_model(這是MVC畢竟)。即他們是同一件事嗎?

2)如果他們是同一件事,那麼我會只有我的books_model存儲在CodeIgniter文件夾結構的模型文件夾中,如果沒有,那麼我會建議在哪裏放置書籍對象(不是模型)?在覈心文件夾中?

我已經有一種感覺,他們確實是一樣的東西,但我只是不知道如何確認,而不會問那些知道:)

+0

我想你指的是一本書的對象實際上應該是你的書控制器什麼。 – Shomz

+1

我不同意那個@Shomz – Matt

+0

在我看來,短語「books model」,「books object」和「books row」在ORM術語中是相同的 - 它們是來自數據庫的書籍行的一個實例。但是,可能有一個書籍屏幕,您可能還有書籍控制器(業務邏輯)和書籍視圖/模板(書籍的演示)。 – halfer

回答

3

我不熟悉CodeIgniter所做的一切,但想到這一點方式:

對於MVC,M很大,很難推廣,而C很小(而V應該很明顯)。記住原則:瘦控制器,胖模型(http://www.bing.com/search?q=thin+controllers+fat+models

現在,爲了解決您的問題,這是我花了一段時間學習。大多數框架在文檔中討論的「模型」並不全是「模型層」。您也可以將其視爲「服務層」。請記住,控制器是「薄」的,所以它們應該很簡單。他們應該做這樣的事情,從請求中獲取輸入,將其傳遞給其他人以存儲在數據庫中,獲取一些數據,並將其發送到視圖。控制器方便了事情。模型/服務,處理所有的邏輯。你所指的「模型」只是一小塊。

所以你有一個BookModelLibraryModel。但也許你也有一個LibraryManager,它保持軌道庫,並在它們之間傳遞書籍。或者一個BookParser,它將加載一些XML並生成一個BookModel。或者一個Translator,它將會把一本書翻譯成另一種語言並生成一本書。

你看到「模型」很難真正定義爲1或2類嗎?這一切都取決於你的應用程序。

用這種方式思考設計階段。用僞代碼寫控制器。像「保存此書」或「導出書籍列表」或「從此圖書館簽出書籍」。然後,不要考慮框架,只需設計您的「業務邏輯」即可完成這些任務。所以你根據你需要做的事情找出你需要的課程。您可以保留BookModelLibraryModel作爲表示數據的一種方式。但你可能需要超出這個範圍,具體取決於你想用做什麼。當然,框架通常會爲你處理很多「服務」層。您可能不需要編寫該類來訪問數據庫,但可以使用框架的數據庫服務來刪除您的BookModel

另一個面向對象的原則使課程專注於做一件事(單一責任)。所以不要讓你的LibraryModel也負責出借書籍,確定前5名書籍,以及你想做的其他事情。只關注存儲關於一個庫的數據,並讓另一個類負責其上的操作(LibraryLender,BookRater)。

好了,好了,希望這是有益的,不只是無意義的胡言亂語......

+0

對於模型層可能存在更多的事實,我很滿意。對Thin Controller/Fat模式目標也很滿意。感謝您的建議,我將不得不多想一想... – Maxcot

+0

好的,我認爲您的解釋(@Matt)適合我。 – Maxcot

相關問題