比如有一個類Person
有一個資料庫操作類Conn
Person裡面有一個操作是買回來一隻雞,雞的資訊要放到資料庫裡面去
應該怎麼設計?
是在perison裡麵包涵Conn類,然後執行個體化Conn對象,訪問資料庫插入資料,還是怎麼弄?
請高手指教!
回複討論(解決方案)
class Person extends Conn{
function byji(){
$conn=new Conn;//執行個體化資料庫類
$conn->add();//插入資料庫
}
}
class Person extends Conn{
function byji(){
$conn=new Conn;//執行個體化資料庫類
$conn->add();//插入資料庫
}
}
很高興你能回複我,我也是這麼想的,但是我的同事說最好在類裡面不要寫與資料庫有關的代碼
不知道是不是算MVC模式什麼的?
class Person extends Conn{
function byji(){
$conn=new Conn;//執行個體化資料庫類
$conn->add();//插入資料庫
}
}
這種情況用組合模式還是比較好吧。繼承用在這裡是不合適的。
引用 1 樓 nowphp 的回複:class Person extends Conn{
function byji(){
$conn=new Conn;//執行個體化資料庫類
$conn->add();//插入資料庫
}
}
這種情況用組合模式還是比較好吧。繼承用在這裡是不合適的。 恩受教了,那如何寫呢。
你可以把資料庫的操作類conn封裝成為一個資料庫的操作類,直接在person中調用conn的靜態方法add
引用 1 樓 nowphp 的回複:class Person extends Conn{
function byji(){
$conn=new Conn;//執行個體化資料庫類
$conn->add();//插入資料庫
}
}
這種情況用組合模式還是比較好吧。繼承用在這裡是不合適的。
+1
LZ應該學習一下設計模式
買雞(這event有點讓我抓狂)從商務邏輯看不是繼承關係,可能你的項目是這樣也說不定
商務邏輯確定一下誰(person)、操作(買)、什麼(商品/雞)三者關係
誰(主體)操作(可變)什麼(可變)??訪問者模式,person作為抽象類別,買不是person的必然操作
誰(主體)操作(不變)什麼(可變)??原型模式,買是person的必然操作,相當於一個屬性
誰(可變)操作(主體且不變)什麼(可變)??橋接模式,買操作作為抽象類別,匯入person買,和買的商品雞
……
還可以用建造模式,購物車、下單、付費等是循序關聯性,作為方法(每個都引入conn),person作為屬性
類似有把一次session作為主體抽象類別(組合模式),登入、購買、修改資料等其他動作都作為方法(非有序關係),person類則作為抽象類別的一個屬性
還有其他組合方式,自己去研究吧
但總體來說,conn串連資料庫都看不出應該直接從屬於person,而是從屬於event的一個步驟
所以conn在橋接模式與person、商品兩個類並列於抽象類別,在原型模式等則二級從屬於抽象類別
建一個event類內部把conn類執行個體化為一個方法這樣組合為佳
能把工作細分越多,組合方式就越多;當然說的是以類為單位,因為類本身的作用就是合并工作,類下細分反而沒意義
上面說的只是我的思維角度,設計模式就是思路,某個模式內還可以有模式,而且每個人想法不同,模式就不同,不是固死的
呵呵,怎麼簡單就怎麼來
不要上人家的圈套
呵呵,怎麼簡單就怎麼來
不要上人家的圈套
哈哈,good advice
設計模式是從大量的實際項目開發中抽象出來的
學習設計模式的目的是讓你跳出自己的思維局限,看看人家是怎麼做的。僅此而已
在自己的開發實踐中,硬是要套上A模式、B模式,不是自己給自己找麻煩嗎
上面的咚咚我也要翻書才叫得上名字,都忘光了
我相信每個人有心學設計模式,最終總會明白自己組合的道理的
唉,人總是這樣的,誰不是從小學開始老師讓背什麼就背什麼,等慢慢學習多了,自然就知道原來要自己“組合”招式的
不曉得國外的小學教育是否如此?
謝謝xuzuning和snmr_com的指導,我太局限MVC裡面了,有自己的設計模式那才是最好的,不用拘泥於某一種模式。