Project

General

Profile

Požadavek #951

Servisní vrstva

Added by Ondřej Fibich about 5 years ago. Updated almost 5 years ago.

Status:
Odeslaný
Priority:
Vysoká
Category:
Jádro systému
Target version:
Start date:
12/02/2014
Due date:
% Done:

0%

Estimated time:
6.00 h

Description

Analýza a současný stav

Servisní vrstva bude obsahovat business funkcionalitu FreenetISu jejíž složitost znemožňuje, aby byla implementována v rámci doménového objektu (modelu s návrhovým vzorem active record) nebo se dotýká více doménových objektů a ze své podstaty není vhodné ji zahrnovat v řadiči (controlleru), jelikož ten by měl pouze v interagovat s uživatelem.

Typicky se jedná např. o funkcionalitu stržení čl. příspěvků, která je implementována jako statická metoda řadiče a tím pádem zamíchána kódu s UI. Navíc statické volání této metody z jiného řadiče je architektonická prasárna. Pokud se to takto používá je nutné načítat mnohdy ne zrovna malou třídu řadiče kvůli jedné funkci (při jednom požadavku na aplikaci by se měl vždy použít pouze jeden řadič což v současném stavu není mnohdy pravda).

Návrh

Vznikne nová složka /application/services, která bude obsahovat třídy reprezentují jednotlivé services. Vnitřní hierarchie adresářů bude odpovídat použítým PHP namespace. Každá service třída sdružuje funkcionalitu z jedné oblasti a měla by být bezstavová (mezi voláními svých metod neuchovává žádný stav). Výjimkou bezstavovosti je kešování, které tato vrstva může efektivně spravovat.

Service třída musí implementovat rozhraní IService, které definuje přístup k továrně pro získání závislých services.

Jednotlivé services nepůjde získat jinak než pomocí třídy ServiceFactory, která bude dostupná z skrze proměnnou každého řadiče services.
Třída ServiceFactory bude metody pro vytvoření všech dostupných service (nepoužije se něco jako ORM#factory, protože pak by nešlo používat našeptávání v IDE). Metody budou pojmenovány následovně: inject<JmenoService>
Vnitřní implementace service továrny bude vytvářet singleton instance jednotlivých service tříd (toto chování půjde v budoucnu snadno upravit).
Továrna je nutná kvůli prozatimnímu přemostění, nekompatibility Kohany s PHP namespaces a zároveň umožňuje optimalizovat tvorbu a přidělování service instancí.

Závislosti mezi řadiči, modely, helpery a services bude následující:

[Controller A] --> [Service X] --> [Model H]
                               --> [Model F]
                               --> [Helper J]
                               --> [Service F]
               --> [Service Y]
               --> [Model G]
               --> [Helper Q]

Řadič je tedy na jeden požadavek vždy pouze jeden. Každý řadič může používat vícero služeb, modelů, helperů a pohledů pro obsluhu jednoho požadavku. Service může používat helpery, modely a jiné services.

Associated revisions

Revision 2385 (diff)
Added by Ondřej Fibich almost 5 years ago

Novinky:
- refs #951: Servisni vrstva
- servisni trida pro initcializaci a upgrade databaze
- servisni trida pro instalaci (nastaveni databaze pro sdruzeni)
- nova verze Version knihovny + unit testy
Upravy:
- vylepseni pri upgradu - kompletne dekomponovano do podfunkci
- vylepseni instalace - chybove hlaseni o selhani
Opravy:
- pokud instalace selze, pak ji lze opakovat bez nutnosti smazat DB

History

#1

Updated by Ondřej Fibich about 5 years ago

  • Description updated (diff)
#2

Updated by Ondřej Fibich almost 5 years ago

  • Status changed from Nový to Odeslaný

Also available in: Atom PDF