簡體   English   中英

在Zend中,為什么我們使用DB Model類和Mapper類作為兩個獨立的?

[英]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模型可以包含博客文章的基本信息

  • 標題
  • 作者
  • 身體
  • 發布日期

但也許你也希望它包含類似的東西:

  • number_of_reads
  • number_of_likes

現在你可以將所有這些數據存儲在一個MySQL表格中,但隨着你的博客的發展和你變得超級出名,你會發現你的統計數據遭受了大量的點擊,你想把它移到單獨的數據庫服務器。

您如何在不更改應用程序代碼的情況下將BlogPost對象的這些字段遷移到其他數據存儲?

使用DataMapper,您可以修改對象保存到數據庫的方式以及從數據庫加載的方式。 這使您可以調整存儲機制,而無需更改應用程序所依賴的實際信息集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM