簡體   English   中英

如何通過單個公共接口(類)抽象化對不同類型對象的訪問?

[英]How can I abstract away access to different types of objects through a single common interface (class)?

我目前正在嘗試重構一些舊代碼。 就目前而言,我有一個EX_User類,它代表我正在使用的系統中的一般用戶。 還有其他幾個擴展EX_User類的類。 例如EX_Limited_User類。

EX_User類擴展了活動記錄類,該活動記錄類將EX_User對象映射到數據庫中用戶表中的一行。

我需要創建一種新類型的用戶(例如New_User ),該用戶仍具有數據支持,但不在同一組表中(並且不通過活動記錄)。 由於我正在使用的應用程序已經在所有地方傳遞了這些EX_User對象,因此我希望創建一個“新的”單個通用User類,該類實際上是所有用戶的通用接口(無論類型如何)。 然后,我將更改代碼庫中的所有引用以與此User對象進行交互,該對象實際上可以由EX_UserEX_Limited_UserNew_User

我正在使用PHP(單繼承),所以我無法讓EX_User擴展任何內容(因為它已經擴展了活動記錄類型類)。

我正在尋找一種方法來實現面向用戶的單個應用程序(通用User界面),同時仍然能夠通過可能存在的任何數量的User實現來實現該接口(以方便新的用戶實現)作為與當前用戶實現的向后兼容性)。

有誰能給我一個扎實的榜樣,說明我將如何實現這一目標? 具體來說,如何組織上面列出的類,以及如何在代碼中傳遞一般的User對象(而不是傳遞不同類型的對象)。 我對繞過不同類型的用戶對象並依靠鴨嘴式(或其他方式)以實現通用性的想法持開放態度,但是我擔心如果沒有清晰的設計,代碼可能很快會因不良的修改而陷入困境。

同樣感謝外部引用可以實現此目標的模式,盡管有些谷歌搜索並沒有提出我所謂的“合適”解決方案。

謝謝!

在此處輸入圖片說明

我認為您可以安排上面顯示的類,它將為ex_user類提供活動記錄類,並且仍然會從新記錄類中為通用用戶提供新的支持方法。 您只需要使用此方法更改超類ex_user。

暫無
暫無

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

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