[英]in Zend, Why do We use DB Model class and Mapper class as two separate?
我正在研究zend項目,我指的是其他zend項目來創建新的Zend Project.But我不喜歡盲目地遵循該項目而不理解。 在Zend目錄結構中,在Model類中,我看到的類主要有兩種類型,如同
- models
- DbTables
- Blog.php //Extends Zend_Db_Table_Abstract
- Blog.php // Contains methods like validate() and save()
- BlogMapper.php // Also Contains methods like validate(Blog b) & save(Blog b)
為什么遵循這種特定的結構? 這是分開Object類和Database模型類嗎?
請解釋。
DataMapper是來自企業應用程序架構模式的設計模式 。
Data Mapper是一個軟件層,用於將內存中對象與數據庫分開。 它的職責是在兩者之間傳輸數據,並將它們彼此隔離。 使用Data Mapper,即使存在數據庫,內存中的對象也不需要知道; 他們不需要SQL接口代碼,當然也不了解數據庫模式。
如何在關系數據庫中存儲數據通常與在內存中構造對象的方式不同。 例如,一個對象將有一個包含其他對象的數組,而在數據庫中,您的表將具有另一個表的外鍵。 由於對象 - 關系阻抗不匹配 ,您在域對象和數據庫之間使用中介層。 這樣,您可以在不影響另一方的情況下進化。
在單一責任原則中,更緊密地遵循其自身層中的映射責任。 您的對象不需要了解DB邏輯,反之亦然。 這為您在編寫代碼時提供了更大的靈活性。
當您不想使用域模型時,通常不需要DataMapper。 如果您的數據庫表很簡單,那么使用TableModule和TableDataGateway甚至只是ActiveRecord可能會更好。
對於其他各種模式,請參閱我的答案
模型的概念是在代碼中包含邏輯數據集合。
DataMapper的想法是將這個應用程序級數據集與您存儲它的方式聯系起來。
對於許多ActiveRecord實現,框架不提供意圖分離,這可能導致問題。 例如,BlogPost模型可以包含博客文章的基本信息
但也許你也希望它包含類似的東西:
現在你可以將所有這些數據存儲在一個MySQL表格中,但隨着你的博客的發展和你變得超級出名,你會發現你的統計數據遭受了大量的點擊,你想把它移到單獨的數據庫服務器。
您如何在不更改應用程序代碼的情況下將BlogPost對象的這些字段遷移到其他數據存儲?
使用DataMapper,您可以修改對象保存到數據庫的方式以及從數據庫加載的方式。 這使您可以調整存儲機制,而無需更改應用程序所依賴的實際信息集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.