请教PHP面向对象设计与数据可访问的设计
有一个数据库操作类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里面了,有自己的设计模式那才是最好的,不用拘泥于某一种模式。