簡體   English   中英

具有數據庫的面向對象設計以及使用PHP和mySQL的可伸縮性/優化

[英]Object Orientated Design with Databases and scalability/optimisation using PHP and mySQL

目前,我對網站結構的重新設計陷入僵局。 目前,我正在使用對象簡化網站的結構(我有一個人對象,一個聚會對象,一個職位對象等...),並且從理論上講,這些對象中的每一個都是其對應表中的一行數據庫。

現在,從我學到的知識來看,OO設計可以使事情簡單易用/實現,這一點我同意-它使我的代碼看起來更加簡潔和易於維護,但是我感到困惑的是如何我開始將對象鏈接到數據庫。

假設有一個人員頁面。 我創建了一個人員對象,該對象等於一個mysql查詢(這是合理的),但是該人員可能有多個位置,需要將其提取並顯示在單個頁面上。

我現在正在做的是使用來自person對象的名為getPositions的方法,該方法從mysql獲取數據並為每一行創建一個單獨的position對象,將數據作為數組傳遞。 這樣可以將查詢減少到最少(每頁2個),但對我來說這似乎是一個可怕的實現,破壞了面向對象設計的規則(我應該更改mysql行,我需要在其中更改它)多個地方),但替代方案更糟。

在這種情況下,替代方法是只獲取我需要的ID,然后創建單獨的位置,傳入ID,然后繼續從構造函數中的數據庫獲取行。 如果您每頁有20個職位,它很快就會加起來,我已經讀到Wordpress因每頁查詢數量多和CPU使用率而受到批評 在這種情況下,我需要考慮的另一件事是排序,這意味着我需要使用PHP對數據進行排序,這肯定不能像在mysql中本機那樣高效。

當然,頁面將被(並且可以被緩存),但是對我來說,這幾乎就像是為構建不良的應用程序作弊一樣。 在這種情況下,正確的解決方案是什么?

您現在的操作方式至少是正確的。 在父對象中具有引用子對象的數組基本上是數據庫中數據表示的方式。

從您的問題中我不能完全確定您是否將子級存儲為父級數組中的引用,但是您應該這樣做,這就是PHP默認情況下應如何存儲它們。 如果您還對從數據庫中拉出的對象使用單例模式,則無需修改多個對象以更改您在問題中建議的一行。

您可能還應該為對象創建多個構造函數(使用返回新實例的靜態方法),以便可以從它們的ID中創建它們並讓它們提取數據,或者僅從已經擁有的數據中創建它們。 創建孩子時將使用后一種情況。 您可以讓父級為其子級提取所有數據,並僅使用一個查詢創建所有數據。 從其ID中獲得一個孩子可能會在其他地方使用,因此如果需要它就很好。

對於排序,您可以創建其他私有(如果需要的話,也可以是公共)數組,這些子數組以特定方式對子項進行排序,並引用與主數組引用的對象相同的對象。

暫無
暫無

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

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