====== Доменные объекты ======
===== Что такое доменные объекты =====
**Доменные объекты** - классы, представляющие какие-либо понятия той или иной предметной области. Примеры доменных доменных объектов: заказ, элемент каталога, посетитель, доставка, упаковка и т.д.
Объекты, которые находятся под управлением подсистемы ORM Limb, должны реализовывать интерфейс **lmbPersistable**:
interface lmbPersistable
{
function getId();
function setId($id);
function getHash();
}
Доменные объекты наследуют от **lmbPersistentObject**, который реализует это интерфейс. Наследование от этого класса гарантирует правильность работы транзакции с данными доменными объектами, а также дает пользоваться интерфейсом **Dataspace**, так lmbPersistentObject наследует от класса **lmbObject**.
===== Пример доменного доменного класса =====
Рассмотрим небольшой пример доменного объекта. Путь это будет класса Recipe (рецепт). У рецепта есть несколько аттрибутов: $title (заголовок), $recipe_items ингредиенты, $dish (посуда). Код данного класса будет таким:
require_once(LPKG_CORE_DIR . '/core/orm/lmbPersistentObject.class.php');
require_once(LPKG_CORE_DIR . '/core/orm/lmbObjectCollection.class.php');
require_once(dirname(__FILE__) . '/RecipeItem.class.php');
class Recipe extends lmbPersistentObject
{
var $dish;
var $recipe_items;
function Recipe ()
{
parent :: lmbPersistentObject();
$this->recipe_items = new lmbObjectCollection();
}
function addIngredient($ingr, $amount, $time, $priority = 0)
{
$recipe_item = new RecipeItem();
$recipe_item->setIngredient($ingr);
$recipe_item->setAmount($amount);
$recipe_item->setTime($time);
$recipe_item->setPriority($priority);
$recipe_item->setRecipe($this);
$this->recipe_items->add($recipe_item);
}
function removeIngredient($ingr)
{
foreach($this->recipe_items as $recipe_item)
{
if($recipe_item->getIngredient()->getId() == $ingr->getId())
{
$this->recipe->remove($recipe_item);
return;
}
}
}
function getRecipeItems()
{
return $this->recipe_items;
}
function setRecipeItems($items)
{
$this->recipe_items = $items;
}
function getTitle()
{
return $this->get('title');
}
function setTitle($title)
{
$this->set('title', $title);
}
function getDish()
{
return $this->dish;
}
function setDish($dish)
{
$this->dish = $dish;
}
}