我真的迷失在這種情況下。我正在嘗試將自定義MVC框架應用於我的Web應用程序。從組織SQL查詢出現混淆。好的,下面是這種情況:php mvc商業邏輯 - 需要建議
UserRepository
,ThreadRepository
和PostRepository
都是保存與它們相關的SQL查詢的存儲庫。例如,在ThreadRepository
我有getThread
功能,通過它的ID從數據庫中獲取一個線程,在UserRepository
我有getUser
功能等等......
不過,說我在我的網頁檢索帖子,其帖子和提交者。當我應用上面的邏輯時,我必須明確地呼叫getUser
,getThread
和getPost
。如果我不使用MVC,那麼我可能會創建這樣一個SQL查詢:
SELECT * FROM user
LEFT JOIN thread on userid = tuserid /* Thread user id = user id */
LEFT JOIN post on pthreadid = threadid /* Post thread id = thread id */
瞧,我會檢索所有需要的東西,在一個單一的查詢。但是在這種情況下,即使我編寫這樣的SQL,我應該在哪個存儲庫中放置它?我的意思是,它的尷尬看到如下代碼:
$pr = new PostRepository();
$user = $pr->getPostAlongItsThreadAndItsSubmitter($postid);
來吧,看看這個,首先所有的代碼是不明確的。您必須查看PostRepository以發現用戶正在從那裏檢索,這實際上不太可能是您作爲第三人看起來的第一位。其次,它不是可擴展的。將來,隨着應用程序的增長,我必須在檢索用戶統計數據或用戶朋友或用戶消息時應用相同的邏輯。那麼這將是複雜的。另一方面,如果我調用上面提到的函數(例如getUser
)來單獨檢索帖子,它的線程和提交者,那麼這意味着我將不得不犧牲很多性能,因爲我正在製作(至少)三種不同的mysql查詢來檢索一些可以通過簡單連接成功管理的基本內容。 (在這裏,我假設3個查詢比簡單的連接慢,這就是我搜索時所看到的)
最後,我真正問的是如何組織業務邏輯,以便我可以檢索一個帖子,它所屬的線程及其提交容易(實際上,這可以是很難,只要它滿足下面的選項),而這個過程是:
- 清澈的第三方的人(如其他開發人員會被招募到隊)
- 表現明智
- 可擴展
所有的評論和意見都非常感謝。
PS:我知道這是不是一個這是什麼或這是爲什麼問題,但請,我真的需要在這種情況下幫助,所以不要在點擊關閉,只是因爲它不是一個問題,可以用一句話回答。如有必要請請我改進問題。
爲什麼你不能總是提交它的提交者和線程?基本上所有關於帖子和緩存的信息。在這種情況下,您只需要一個方法 - >'getPost()'。 – egis