2012-06-16 3 views
0

Это мой первый вопрос после нескольких лет нахождения хороших ответов здесь. Я перекодирую одну из моих работ, пытаясь использовать более глубокий уровень OOP aproach, но я не знаю, правильно ли я делаю то, что я делаю.PHP crud abstraction methods

Что я пытаюсь сделать, это простое создание продукта, но достаточно абстрактное, чтобы другие кодеры не знали, что использовать db, или как действительные данные продукта. Просто попробуйте создать ($ 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

Теперь мой вопрос заключается в следующем: Должен ли я создать другую модель, cлагающими фактический продукт (добавить в категорию это таблица, то бренд к его таблице ... затем создайте продукт и сохраните его), а затем вызовите эту модель из контроллера, передающего параметры, или я должен преобразовать эту большую модель (ту, которая составляет продукт) вместо контроллера.

Я верю, что я должен создать большую модель, но на данный момент я не уверен ни о чем. Я прочитал много о хороших практиках в ООП, и у меня есть сомнения на каждом шагу: D

Что я понимаю (исправьте, если я ошибаюсь), что у меня должно быть достаточно слоев в мой код, чтобы сделать его более чистым и конкретным. Но в некоторых случаях я не вижу, когда этого достаточно.

Возможно, это глупый вопрос (конечно !!), но я не знаю, какого черта я делаю больше! Спасибо вам!

+0

Я найти его трудно понять вашу проблему – Galen

+0

Вопрос в том, насколько глубоко я должен пойти в абстракции. Должен ли я создать модель, которая создает весь объект (создать категорию, бренд и т. Д.), Или вся эта логика должна находиться внутри установленного контроллера. – gdi

+0

Прочтите еще одну статью о ООП: 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 нужно будет сортировать категорию, если она не существует (вызов метода addCategory по методу Catogory), а затем addProducts не просто о добавлении продукта, поэтому мне нужен еще один слой – gdi

+0

@gdi Создайте новый класс, который расширяет абстрактный класс для управления категориями. – David

+0

да, но у меня должна быть модель, которая выполняет всю работу? Я имею в виду модель, которая вызывает метод create category, а затем создает объект с возвращенным идентификатором категории. Или это должно быть сделано в контроллере? Код будет примерно $ cat-> create ('blabla'); $ prod-> create ('blabla', $ cat-> id); Вопрос в том, где эта логика должна быть реализована в новой модели или в контроллере? – gdi