架構模式中的Active Record和Data Mapper


架構模式中的Active Record和Data Mapper

概念
  • 在簡單應用中,領域模型是一種和數據庫結構一致的簡單結構,對應每個數據庫表都有一個領域類,在這種情況下,有必要讓每個對象負責數據庫的存取過程,這也就是Active Record(活動記錄)。
  • 領域對象直接魚數據庫表進行交互,這帶來了一個問題,隨着領域邏輯變的更加復雜,它就慢慢轉變成一個大的領域模型,簡單的Active Record已經不能滿足要求了。
  • 領域類和表一對一匹配也開始隨着把領域邏輯放入更小的類而失效。關系數據庫無法處理繼承,因此使用策略模式等面相對象模式非常困難。
  • 一種更好的辦法是把數據庫和數據庫完全獨立,讓間接層完全領域對象和數據庫表之間的映射,這個映射類也稱作Data Mapper(數據映射器)。這個映射類處理數據庫和領域模型之間所有的存取操作,並且允許雙方都能獨立變化。
  • 如果領域邏輯非常簡單並且類和表十分一致,使用簡單的Active Record就足夠了。如果領域邏輯比較復雜,長線項目,Data Mapper則可能是需要的。
ORM中的Active Record和Data Mapper
  • Ruby和Laravel的ORM都采取了Active Record的模式,因此它們ORM可能像下面這樣:
 $user = new User;
$user->username = 'philipbrown';
$user->save();
  • 再來看使用Data Mapper的ORM是怎樣的:
$user = new User;
$user->username = 'philipbrown';
EntityManager::persist($user);
  • 現在我們察看到了它們最基本的區別:在Active Record中,領域對象有一個save()方法,領域對象通常會繼承一個ActiveRecord的基類來實現。而在Data Mapper模式中,領域對象不存在save()方法,持久化操作由一個中間類來實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM