建構複雜查詢時,會出現這樣的問題:資料映射器或服務層應該管理的條件。這個難題源自於想要在簡單性和可維護性之間取得平衡的願望。
資料映射器模式提倡極簡介面,使用 fetch()、save() 等方法,和remove()處理基本操作。條件封裝在域物件本身內,確保了乾淨的資料映射器介面。
$user = new User; $user->setName('Jedediah'); $mapper = new UserMapper; $mapper->fetch($user); if ($user->getFlags() > 5) { $user->setStatus(User::STATUS_LOCKED); } $mapper->save($user);
這種方法確保資料映射器保持專注於其核心功能,同時也透過領域物件促進複雜的查詢條件。但是,它需要一個公共方法來從網域物件中檢索資料以實現獲取目的。
在此方法中,服務層承擔解析條件的責任。這簡化了資料映射器,使其具有接受多個條件的通用 get() 方法。但是,這可能會導致網域邏輯從資料對應器中洩漏,因為服務層將處理複雜的查詢。
$bookService->getByAuthorAndPublisher($authorName, $publisherName);
這些方法之間的選擇是主觀的,反映了開發者的偏好。然而,需要考慮的一些關鍵因素包括:
最終,最佳方法取決於特定背景和開發團隊的優先事項。
以上是資料映射器與服務層:誰應該處理複雜查詢中的條件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!