контроллер представления модели — пример класса сущности PHP

Я пытался найти пример класса сущности, чтобы убедиться, что я должен в него вставить. Может ли кто-нибудь привести пример того, как будет выглядеть такой класс?

  1. Должен ли этот объект содержать только данные, как я мог бы просто использовать объект StdClass?
    Или он должен содержать мои CRUD-методы тоже? (Создать, прочитать, обновить, удалить)

  2. Будет ли хорошим подходом создать экземпляр моего класса сущностей для каждой строки в моей базе данных или модели, или я должен использовать один класс сущностей и сохранить все разные строки в свойстве массива класса сущностей?

1

Решение

В моем последнем проекте я отделился сущность а также картопостроитель (Действия CRUD), так это выглядит так:

сущность

Class PostEntity
{
public $title;
public $text;
}

картопостроитель

Class PostMapper
{
public function load($id)
{
// load one record from Database where id = $id
}

public function save()
{
// insert new record or edit in Database
}

public function delete()
{
// delete from Database
}
}

Использование — 1 сущность

$postMapper = new PostMapper();
$post = $postMapper->load(1); // load from Database where post_id = 1
$post->title = "New title"; // set new post title
$postMapper->save($post); // edit post in Database

Использование — несколько объектов

$postMapper = new PostMapper();
$posts = $postMapper->loadAllFromCategory(2); // load from Database where cateogory_id = 1
foreach ($posts as $post) {
echo "<h3>" . $post->title . "</h3>";
}

Итак, в моем примере сущность это «глупый» набор переменных (столбцы из таблицы базы данных) и сеттеры / получатели (необязательно), в то время как картопостроитель сделать всю работу с базой данных (CRUD). Если я хочу изменить маппер, чтобы получить результаты из внешнего XML, я просто создаю PostMapperXml класс для загрузки данных из XML.

1

Другие решения

Как заметил комментатор, использование MVC-фреймворка было бы лучшим способом облегчить задачу. Или список объявлений с использованием Doctrine2 — ORM (он сопоставляет классы PHP с таблицами базы данных и выполняет все запросы за вас).

Но чтобы ответить на ваш вопрос:

  1. Это должен быть отдельный класс для каждой сущности (таблицы). Должен контиан список объявлений Методы CRUD, но могут содержать другие методы, связанные с данными (сущность «Article» может содержать метод getBodyLinks (), который будет анализировать тело и возвращать все URL-адреса.

  2. Каждая сущность … ну, одна сущность. Если вы по какой-то причине не хотите, чтобы множество экземпляров объектов плавало вокруг, вы должны двигаться на более низком уровне, чем объект.

Пример Symfony2 + Doctrine2:

https://github.com/stfalcon/BlogBundle/blob/master/Entity/Post.php

(это просто случайное репо, которое я нашел на github)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector