Maison > développement back-end > tutoriel php > 请教PHP面向对象设计与数据可访问的设计

请教PHP面向对象设计与数据可访问的设计

WBOY
Libérer: 2016-06-23 14:04:01
original
1360 Les gens l'ont consulté

比如有一个类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里面了,有自己的设计模式那才是最好的,不用拘泥于某一种模式。

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal