Как называется эта техника? - PullRequest
0 голосов
/ 23 марта 2011

Я создаю простую библиотеку PHP.

Одна функция - разрешать делать такие вещи:

$myCatalog = new Catalog();  
// add books  
for ($i=0; $i<99; $i++) {  
    $myBook = new Book();  
    $myBook->title = 'Book ' . $i;  
    $myBook->parentId = $myCatalog->id;  
    $myBook->create();  
}  
// add other product  
for ($i=0; $i<99; $i++) {  
    $myProduct = new Product();  
    $myProduct->name = 'Product ' . $i;  
    $myProduct->parentId = $myCatalog->id;  
    $myProduct->create();  
}
$catalog_books = $myCatalog->getChildren('Book');  
$catalog_products = $myCatalog->getChildren('Product');

Полагаю, это не совсем функциональность ORM?

Ответы [ 2 ]

0 голосов
/ 23 марта 2011

Термин ORM (реляционное сопоставление объектов) предполагает, что в нем задействована база данных (или другой объект / пространство данных) и что в базе данных есть объекты (например, таблицы), называемые Каталогом, Книгой, Продуктом и т. Д. И чтомежду этими объектами есть отношения - в каталоге много книг, в каталоге много продуктов и т. д. И что вы создали эти объекты PHP для моделирования объектов базы данных в вашем приложении.Но если это не так, то есть если вы не отображаете объекты базы данных и отношения с объектами PHP, то это просто пример старого доброго объектно-ориентированного программирования.

0 голосов
/ 23 марта 2011

Я бы сказал, что это выглядит как Шаблон активной записи

Обычно реализации объекта активной записи несут ответственность за себя (Create(), Update(), Delete())

ORM (объектно-реляционное сопоставление) обычно используется при сопоставлении схемы базы данных непосредственно с POCO (объект простого старого кода).Тогда посредник (обычно репозиторий) отвечает за поддержку ваших сущностей.

Большинство систем ORM используют что-то вроде этого:

$user = new User();
$user->Username = "Aren";
$user->Email = "aren@somewhere.com";

$em = new EntityManager;
$em->persist($user);
$em->flush();

----- Позвольте мне перефразировать ----

ORM , Реляционное отображение объектов обычно работает путем определения ассоциации между вашими таблицами и полями в объекте.Существует множество способов сделать это, Doctrine ORM поддерживает 3 метода: аннотацию кода, XML и YAML.

Пример отображения доктрины:

<?php
/** @Entity */
class MyPersistentClass
{
    /** @Column(type="integer") */
    private $id;
    /** @Column(length=50) */
    private $name; // type defaults to string
    //...
}

Затем все операции создания / чтения / обновления / уничтожения (CRUD) на объектах управляются через менеджер / репозиторий объектов.SQL сгенерирован для вас, вы не несете ответственности за обеспечение того, как ваша сущность выводится из БД или сохраняется.(Хотя некоторые ORM предоставляют вам гибкость для его расширения).

ARP , Шаблон активной записи - это место, где каждый объект представляет строку в базе данных.Во многих распространенных реализациях ARP большинство операций с БД отображаются прямо на объекте (хотя и не обязательно).

$user = new User();
$user->loadByID(42);

Системы ORM иногда используют ARP для помощи в управлении сущностями.

В конечном счете, однако,без каких-либо метаданных для привязки объекта к его строке, я бы не сказал, что это ORM.

Я думаю, что это сводится к следующему:

  • Еслисистема использует метаданные для автоматической привязки свойств / полей объекта к соответствующим столбцам таблицы.Его можно классифицировать как систему ORM.
  • Если каждый объект представляет одну строку таблицы и обычно (но необязательно) предоставляет функции для управления собой, например .save() .delete() и т. Д. Он можетбыть классифицированным как ARP (шаблон активной записи)
  • Ваша система может быть одновременно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...