Discriminator
V distribuovaném programování slouží discriminator jako identifikátor entity (tzv. tag), který vyjadřuje, o jaký typ entity se jedná na základě předem definovaného výčtu, který určuje samotný systém (například UNION nebo ENUM typ v relační databázové tabulce).
Discriminator se používá pro převod objektového návrhu entit v rámci programovacího jazyka do tabulkové podoby[1], kdy potřebujeme zachovat informaci o názvu původního typu entity v programovacím jazyce.
Příklad:
Mějme 3 entity reprezentující různé typy produktů v internetovém obchodu, které mezi sebou zároveň definují závislosti pomocí dědičnosti:
<?php
class Product {
public $name;
public $description;
}
class Book extends Product {
public $pagesCount;
public $author;
}
class Phone extends Product {
public $system;
public $batteryCapacity;
}
Například v jazyce PHP můžeme velice jednoduše instancovat objekt Book, která reprezentuje produkt s knihou a přidává informaci o počtu stran a autorovi. Pokud však budeme chtít všechny typy produktů (základní produkt, knihu a telefon) uložit do relační databáze, můžeme vytvořit pouze jednu tabulku product, která bude mít následující sloupce:
- name
- description
- pages_count
- author
- system
- battery_capacity
- discriminator
Sloupec discriminator v tomto případě bude nést hodnoty product, book nebo phone v závislosti na aktuálně uložené entitě. Úkolem knihovny pro obsluhu databáze v konkrétním jazyce (například Doctrine[2]) je pochopit nastavení Discriminatoru a podle toho vytvořit instance správné entity s ohledem na předem definovaný seznam.
Reference
- Using Discriminator Column. www.visual-paradigm.com [online]. [cit. 2019-07-01]. Dostupné online.
- Inheritance Mapping - Doctrine Object Relational Mapper (ORM). www.doctrine-project.org [online]. [cit. 2019-07-01]. Dostupné online.