欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-03-11 09:37:52
...
比如有一个类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里面了,有自己的设计模式那才是最好的,不用拘泥于某一种模式。