比如有一个类Person
有一个数据库操作类Conn
Person里面有一个操作是买回来一只鸡,鸡的信息要放到数据库里面去
应该怎么设计?
是在perison里面包涵Conn类,然后实例化Conn对象,访问数据库插入数据,还是怎么弄?
请高手指教!php面向对象,数据库

解决方案 »

  1.   

    class Person extends Conn{
       function byji(){
          $conn=new Conn;//实例化数据库类
          $conn->add();//插入数据库
       }
    }
      

  2.   


    很高兴你能回复我,我也是这么想的,但是我的同事说最好在类里面不要写与数据库有关的代码
    不知道是不是算MVC模式什么的?
      

  3.   

    你可以把数据库的操作类conn封装成为一个数据库的操作类,直接在person中调用conn的静态方法add
      

  4.   


    +1
    LZ应该学习一下设计模式
    买鸡(这event有点让我抓狂)从业务逻辑看不是继承关系,可能你的项目是这样也说不定业务逻辑确定一下谁(person)、操作(买)、什么(商品/鸡)三者关系
    谁(主体)操作(可变)什么(可变)——访问者模式,person作为抽象类,买不是person的必然操作
    谁(主体)操作(不变)什么(可变)——原型模式,买是person的必然操作,相当于一个属性
    谁(可变)操作(主体且不变)什么(可变)——桥接模式,买操作作为抽象类,导入person买,和买的商品鸡
    ……
    还可以用建造模式,购物车、下单、付费等是顺序关系,作为方法(每个都引入conn),person作为属性
    类似有把一次session作为主体抽象类(组合模式),登录、购买、修改资料等其他操作都作为方法(非有序关系),person类则作为抽象类的一个属性
    还有其他组合方式,自己去研究吧但总体来说,conn连接数据库都看不出应该直接从属于person,而是从属于event的一个步骤
    所以conn在桥接模式与person、商品两个类并列于抽象类,在原型模式等则二级从属于抽象类
    建一个event类内部把conn类实例化为一个方法这样组合为佳
    能把工作细分越多,组合方式就越多;当然说的是以类为单位,因为类本身的作用就是合并工作,类下细分反而没意义上面说的只是我的思维角度,设计模式就是思路,某个模式内还可以有模式,而且每个人想法不同,模式就不同,不是固死的
      

  5.   

    谢谢xuzuning和snmr_com的指导,我太局限MVC里面了,有自己的设计模式那才是最好的,不用拘泥于某一种模式。