【问题标题】:PHP crud abstraction methodsPHP crud 抽象方法
【发布时间】:2012-06-16 19:07:46
【问题描述】:

这是我在这里找到好的答案几年后的第一个问题。 我正在重新编码我的一项工作,试图使用更深层次的 OOP 方法,但我不知道我所做的是否“正确”。

我想做的是一个简单的产品创建,但足够抽象,因此其他编码人员不必知道使用什么数据库,或者如何验证产品数据。就像简单的 create($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 结构相同的类别、品牌等的一些类

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

我相信我应该创建一个大模型,但我现在还不确定。我已经阅读了太多关于 OOP 良好实践的材料,但我对每一步都有疑问:D

我的理解(如果我错了,请纠正我)我的代码中应该有足够的层,以使其更干净和具体。但在某些情况下,我看不出什么时候足够。

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

【问题讨论】:

  • 我很难理解您的问题
  • 问题是我应该在抽象中走多远。我应该创建一个模型来创建整个对象(创建类别、品牌等)还是所有逻辑都应该在控制器内部。
  • 再读一篇关于 OOP 的文章:advantexllc.com/blog/post.cfm/… :) 顺便说一句,你考虑过使用 Doctrine/Propel/phpactiverecord/anything_else 吗?
  • @biziclop 感谢您的链接,实际上我正在使用代码中提到的 phpactiverecord

标签: php crud layer abstraction


【解决方案1】:

只需使用一个模型插入产品。例如:

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'));

【讨论】:

  • 是的,但是 addProduct 如果不存在则需要创建类别(在 Catogory 方法上调用 addCategory 方法)然后 addProducts 它不仅仅是添加产品,这就是我需要另一层的原因跨度>
  • @gdi 创建一个扩展抽象类的新类,用于分类管理。
  • 是的,但是我应该有一个可以完成所有工作的模型?我的意思是,一个模型调用创建类别方法,然后使用返回的类别 ID 创建对象。还是应该在控制器中完成?代码类似于 $cat->create('blabla'); $prod->create('blabla', $cat->id);问题是应该在哪里实现这个逻辑,在新模型中还是在控制器中?
  • 父抽象类应该用于覆盖产品和类别。创建 2 个子类,一个用于产品,一个用于类别。您可以在创建产品时将类别 ID 或名称传递给参数之一。控制器将仅用于调用模型。
  • 所以我的想法是对的,我需要 3 个模型,一个用于产品,一个用于类别,一个我只是调用前两个模型来完成任务?所有这一切都由一个控制器触发,该控制器拥有创建这些东西的参数?
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多