2011-07-07 90 views
1

在數據庫抽象層的OOP設計中,是否適合爲使用它的原始DB對象創建包裝對象?爲了提供所有的用戶,在其內部傳遞並創建一個活動連接,以便諸如CRUD的其他對象可以繼承它並且已經有一個開放的連接?PHP OOP設計:DB積極連接

< - 編輯 - >

一些背景:我想在這裏建立什麼是DB-邏輯和業務邏輯 所以我想創建一個表CRUD對象之間的良好分離被其他業務邏輯對象 繼承,但是當我想到如何連接到數據庫將在這些對象之間傳輸 時出現問題。它沒有感覺很不錯,只是把它作爲參數,如

class TableCrud(AbstractDb $db) {...} 
class BusinessObject(TableCrud $tc) { ... } 

也是另一種方法,這並不覺得有一個包含數據庫用戶憑據的對象,這樣的權利,在它打開一個連接,讓TableCrud繼承它。

我敢肯定,我錯過了這裏的對象機制之間的一些。

+0

這比「是/否,它是/不適當」要複雜一些。完全取決於你的目的。你所描述的需要一個父級靜態或者可能的單身類來保存所有派生對象或子類的活動連接。你會有多少個不同的連接?網站或應用有多大(以腳本文件而言)?您是否希望腳本可以移植到其他網站/應用程序?您是否預見稍後切換DB擴展? –

回答

0

當我寫的數據庫模型,它一般是這樣的:

Model.php:

include('connect.php'); 

class Model{}... 

connect.php:

include('Database.php'); 
include('dblogin.db'); 

$db = new Database($user, ...); 

database.php中:

class Database{} 

dblogin.db:

$user = user; 
...etc... 

tl;dr:是的,這怎麼可能會在你的DAL的頂部添加了一個抽象層。

+0

嘿謝謝你的回放,但我還沒有理解的東西,如果我們堅持你的例子,類Module()將使用包含的數據庫連接對象?它是否會將它作爲其參數之一? 因爲如果這樣的話,我不想要一個問題 – Xeus

+0

@Xeus,謝謝你的接受。回答你的問題,不。需要數據庫訪問的'Model'或您的案例'Module'中的每個函數都使用先前定義的$ db變量(在'connect.php'中設置),方法是在函數的開頭引用它:'global $ db;' 。這不是最漂亮的,但這是迄今爲止我找到的最佳解決方案。 – rockerest

0

哇在那裏慢下來。一點標點符號會有很大的幫助。

我沒有看到任何問題在任何不容易理解的東西上面打包一個額外的抽象層。只要確保它是必要的,它會使事情變得更容易理解,而不是相反。有時如果你不得不問,它已經意味着你在控制問題上處於邊界。