2012-06-16 53 views
0

这是我在这里创建好答案几年后的第一个问题。 我正在重新编写我的工作之一,试图使用更深层次的OOP aproach,但我不知道我所做的是否“正确”。PHP crud抽象方法

我想要做的是简单的产品创建,但足够抽象,所以其他编码人员不必知道数据库使用什么,或如何有效的产品数据。只需简单地创建($ attr)方法即可。

这是代码的基本方案。

abstract class Crud_model_abstract { 

# private vars 
# getter for private vars 
# setter for private vars 
# some basic methods 
} 

class Product_model_crud extends Crud_model_abstract { 

# private vars 
# getter for private vars 
# setter for private vars 
# CRUD methods (using phpactiverecord.com lib) 
} 

然后一些类的类别,品牌等具有相同的结构比Product_model_crud

现在我的问题是这样的:我应该创建一个构成实际产品的另一个模型(添加类到它的表,然后品牌然后创建产品并存储它),然后从传递参数的控制器中调用该模型,或者将该大型模型(构成产品的模型)转换为控制器。

我相信,我应该创造一个大模型,但我不确定任何事情在这一点上。我读过很多关于面向对象操作良好实践的材料,并且我在每一步都有疑问:D

我明白了(纠正我,如果我错了)它应该有足够的图层我的代码使它更加干净和具体。但在某些情况下,我看不到足够的时间。

也许这是一个愚蠢的问题(当然!!),但我不知道我到底在做什么了! 谢谢你!

+0

我发现很难理解您的问题 – Galen

+0

的问题是我应该有多深的抽象。我应该创建一个模型来创建整个对象(创建类别,品牌等),或者所有的逻辑都应该放在控制器内部。 – gdi

+0

阅读这篇关于OOP的更多文章:http://www.advantexllc.com/blog/post.cfm/how-oo-almost-destroyed-my-business :)顺便说一句,你有没有考虑过使用Doctrine/Propel/phpactiverecord /还要别的吗 ? – biziclop

回答

0

只需使用一个型号即可插入产品。例如:

class Products extends abstractClass { 

public function addProduct($params) { 
// Insert 
} 

public function getProduct($id) { 
// Get a product 
} 

public function editProduct($id, $params) { 
// Edit 
} 

} 

您的抽象类将指定哪些方法需要包含在您的子类中。我认为你是在过度思考整个场景。

你会然后执行:

$product = new Products(); 
$product->addProduct(array('id' => 5, 'name' => 'Dog toy')); 
+0

是的,但addProduct需要创建类别(如果不存在)(在Catogory方法上调用addCategory方法),然后addProducts不仅仅是关于添加产品,这就是为什么我需要另一个图层 – gdi

+0

@gdi创建一个新的类来扩展抽象类以进行类别管理。 – David

+0

是的,但我应该有一个可以完成所有工作的模型?我的意思是,一个调用create category方法的模型,然后使用返回的类别ID创建对象。或者这应该在控制器中完成?代码将如 $ cat-> create('blabla'); $ prod-> create('blabla',$ cat-> id); 问题是这个逻辑应该在新模型还是在控制器中实现? – gdi