請教PHP物件導向設計與資料可訪問的設計

來源:互聯網
上載者:User
比如有一個類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裡面了,有自己的設計模式那才是最好的,不用拘泥於某一種模式。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.