Buďte efektivní díky polymorfismu

Při implementaci jakéhokoliv projektu máme vždy na paměti, že projekt bude bobtnat. Nejen, že přibude obsah, ale také nové weby. Tyto nové weby budou mít nějaké základní funkce společné všem webům. A my se neradi opakujeme. Vývojáři by měli pracovat co nejefektivněji a neměli se opakovat, DRY princip (Do Not Repeat Yourself) je při vývoji naprosto stěžejní. Při zahájení vývoje na novém projektu to může být náročná výzva, která ale ve výsledku ušetří spoustu času nejen při přidávání dalších webů. Také změny zahrnující všechny weby se provedou velice snadno a na jednom místě.

Sdílení šablon mezi weby

Pro dosažení dědičnosti šablon vytváříme sdílené šablony ve zvláštním adresáři mimo adresáře jednotlivých webů. Každý web má své vlastní šablony a ty dědí ze sdílené základní šablony. My ji nazýváme „_Global Base Template“.

Bez mapování děděných šablon na C# objekty by šlo o nevyužitý potenciál. Díky polymorfismu je možné sdílet služby, komponenty nebo dědit workflow jak jsem popsal ve starším příspěvku.

Sdílené služby pro běžné úlohy

Když dokážeme správně namapovat sdílené šablony, aby byla zachována dědičnost c# tříd pak můžeme naplno využít jejich potenciál. Můžeme vytvářet sdílené služby pro drobečkovou navigaci, menu, mapu stránek, robots.txt atd. Všechny sdílené služby ponecháme virtuální, aby je mohla implementace webu v případě potřeby přetížit pro upravenou funkčnost, která se liší od ostatních webů.

Není třeba znovu implementovat obecné funkce

Vývoj se díky sdílení obecných funkcí může soustředit na specifické požadavky webu a přitom nepřicházíme o možnost lehce upravit sdílené funkce.

_Global Base Page

Základní sdílená šablona.

Všechny šablony stránek na všech webech dědí ze základních šablon daného webu. A všechny tyto základní šablony daného webu dědí ze základní sdílené šablony. My ji nazýváme „_Global Base Page“. Obsahuje všechna společná pole pro všechny weby, používané na všech stránkách. Základní šablona konkrétního webu může definovat vlastní pole specifické pro daný web, čímž se množina polí pro daný web rozroste jako např. checkbox pro skrývání horního menu, který není relevantní pro všechnyweby.

_Global Base Template

_Global Base Template

Mapování na POCO třídy

Klíčový krok je správně namapovat sdílené a základní šablony daného webu, tak aby se sebe navzájem dědili. Tím získáme čisté c# třídy využívající polymorfismus, takže každou stránku lze přetypovat na IGlobalBasePage. Nic nám potom nebrání vytvářet sdílené služby, které používají sdílenou základní šablonu.

GlobalBasePage

GlobalBasePage

BasePage

BasePage

ArticlePage

ArticlePage