Az üzleti logika építésének koncepciója, a szoftver mechanikája

Az üzleti logika kialakításához a funkcionális elemek hierarchikus modelljét használják. Vagyis az üzleti logika alapvető eleme egy függvény - egy olyan komponens, amelyet a Command objektum segítségével hajt végre a Exec módszerrel. ez a parancs tipikus tervezési mintája

A parancs négy alaposztálya van. Kezelés. Folyamatot. alkalmazás:

  1. A parancs egy logika, amely folyamatosan és folyamatosan fut a kiszolgálói oldalon
  2. A művelet a parancs speciális esete, és interaktív parancs, amely kölcsönhatásba lép az ügyfélvel (az ügyfél bármilyen ügyfélalkalmazás)
  3. A folyamat egy művelet különleges esete, és hosszútávú művelet, amely időről időre megőrzi a szerveren a jelenlegi állapotát, függetlenül az ügyfélalkalmazás élettartamától. A folyamatnak számos állama van, és ebben az állapotban rendelkezésre álló bizonyos műveletek köre minden állapotra vonatkozik, beleértve egy folyamatot folyamatként is, amelynek eredményeképpen alprocesszá lesz.
  4. Az alkalmazás a folyamat különleges esete, és az ügyfelek kontextusában egyedülálló. Vagyis minden ügyfélnek (ügyfélalkalmazásnak) van egy példánya az alkalmazásnak, és az egyetlen. Ebben az esetben az Alkalmazás az alkalmazás gyökere. Belépési és kilépési pontja.

Így az üzleti logika a gyökéralkalmazással rendelkező fa formájába épül. az államokhoz kötődő alkalmazási állapotok és beágyazott műveletek. A fa korlátlan számú szinten van.

Példaként tekintse meg az árverések lebonyolítására szolgáló platformot, amelyet WEB-alkalmazásként valósítanak meg. Bármely felhasználó beléphet a webhelybe, beleértve a webhelyen nem regisztrált felhasználókat. Az ilyen felhasználó azonban hozzáférhet bizonyos funkciókhoz:

Mindezek a műveletek elérhetők az alkalmazáshoz az Új állapotban, ami azt jelenti, hogy a folyamat elindult, de még nincs mentett példány az adatbázisban (vagy egy példány még nincs inicializálva).

A két államban megismételt műveletek fennmaradó része feltétlenül feltétel nélküli műveletekké válik, mivel nem függnek az alkalmazás állapotától. A folyamatnak ez a lehetősége is megvan. Vagyis a folyamatban olyan műveleteket írhatunk le, amelyek kontextusfüggőek (államhoz kötöttek) és környezetfüggetlenek, amelyek végrehajthatók a folyamat bármely állapotában, legfőképpen a folyamat eléréséhez.

A fenti információk alapján újraépítheti az üzleti logikai fát.

Most megpróbáljuk festeni az új felhasználó regisztrálási folyamatát a regisztrációs platformon.

Akkor az egész fánk így fog kinézni:

Ennek eredményeképpen egy olyan fát kapunk, amely leírja az alkalmazásunk egészét, ahol a hozzáférést csak az Alkalmazás alkalmazás első szintjének folyamatok és műveletek futtatására állítottuk be a regisztrált állapotban.

Ez a fa vizuálisan mutatja az alkalmazás logikáját és a fejlesztés sorrendjét.
Az ilyen kialakítás és az ügyféllel való koordináció után továbbra is konfigurálni kell a folyamatokat és végre kell hajtania a műveleteket. A műveleteket az MVC tervezési mintának megfelelően hajtják végre, ahol a művelet vezérlőként működik.

A beágyazott folyamat futtatása több forgatókönyvben is megtörténhet:

  1. A szinkron indítás azt jelenti, hogy az a folyamat, amelyen belül a gyermekprocesszor szinkronban fut, nem érhető el, amíg a gyermeki folyamat nem fejezi be munkáját
  2. Az aszinkron indítás azt jelenti, hogy a szülőfolyamat nem várja meg a gyermeket, és hozzáférést biztosít más alfolyamatok indításához.
  3. Az indítás indítása egy másik entitásnak szánt függő alprocesszor indítását jelenti, például egy, az üzemeltetőnek szánt regisztrációs alkalmazáshoz szükséges ellenőrzési folyamat elindítását. Az indítás indítása lehet szinkron vagy aszinkron
  4. A többszörös indítás azt jelenti, hogy ugyanazon típusú több egymásba ágyazott folyamatot el tud indulni, különben az alfolyamat újraindítása egy már létező alfolyamathoz való hozzáférést eredményez.

A folyamat minden egyes példánya közvetlenül kapcsolódik ahhoz az entitáshoz, amely létrehozta, vagy amelyhez a folyamatot célozza. Senki más nem férhet hozzá a folyamathoz. A hozzáférési jogok kijelölésének rendszere az üzleti logika építésével új jelentéssel bír.

  1. Egy művelet vagy parancs hívása csak akkor lehetséges, ha abszolút útvonalat ad meg. Például, op = Cabinet - nyissa meg a személyes szekrényt (a root Application parancs elmarad). A szekrény csak akkor nyílik meg, ha az alkalmazás regisztrált állapotban van. op = Cabinet / WorkSpace - megnyílik a személyes szekrény asztala. Az op = WorkSpace művelethez való hívás nem vezet közvetlenül semmihez (kivéve a "nem elérhető" üzenetet), mert Az Alkalmazáson nincs ilyen művelet, és csak akkor jelenik meg, ha a Kabinet műveletet inicializálta. Emellett a WorkSpace-műveletben regisztrált AddPanel és RemovePanel parancsok is meghiúsulnak, amíg a WorkSpace
  2. A folyamat hívása egy másik forgatókönyvben történik. A folyamat egy meglévő példányának eléréséhez adja meg annak típusát és azonosítóját, például op = RegistrationOID = 8253. Ugyanakkor a szerver oldalon a folyamat a hívó entitáshoz tartozik (a folyamat Tárgy mezőjében). Új folyamat elindításához meg kell adnia a szülőfolyamatot (kivéve az Alkalmazást, amely mindig inicializálva van, és egy singleton), annak azonosítója és a beágyazott folyamat neve, például op = Registration / SendRequestOID = 8253. A SendRequest alfolyamat elindítása csak akkor lehetséges, ha az OID = 8253 regisztrációs folyamat a felhasználó tulajdonában van, és abban az állapotban van, amelyben az alfolyamat rendelkezésre áll.

Ennek eredményeképpen egyszerre van módunk az üzleti logika leírására és a hozzáférési jogok körvonalazásának eszközére.

A parancsnokság egyszerűen szégyenletes. Van egy virtuális módszer Exec ($ params), ahol $ params egy asszociatív tömb, ahol a kulcs a paraméter neve, és az érték a paraméter értéke. A Command osztály örökösei, az átfedéses Exec-módszerben a logikát írják. Pillanatnyilag a parancsok példái: Tranzakció - egy parancs, amely megnyitja a tranzakciót, elindít egy eseményt, amelynek kezelője logikát hajt végre, vagy lezárja a tranzakciót, vagy a végrehajtott logika eredményétől függően

A Sendmail az a parancs, amely e-mailt küld

A művelet szigorúbban szabályozza az üzleti logikát. Az alapvető módszer az Exec. De az örökösökben ez nem átfedésben van. Az Exec módszer így néz ki:

Először a virtuális Init-módszer hívása történik, amely a beágyazott mûveleteket és parancsokat regisztrálja, amelyek az operáción belül rendelkezésre állnak, például egy példa az Init-módszer végrehajtására.

Ezt a módszert a műszerfalon használják, és meghatározza, hogy mely oldalak érhetők el a műszerfalon. Mivel beágyazott ügylet lehet elég sok, de minden műveletet kell összeállítani, és ugyanabban az időben minden alkalommal kerül kiválasztásra csak egyikük, logikus, hogy nem regisztrál maguk a műveletek, például a proxy - parancsokat kell létrehozni műveletek, mint például:

Ez a teljesítmény optimalizálása.

Ezután a művelet Végrehajtási módjában egy al műveletet definiálunk, ha megadjuk. Lásd az op op. Egyébként a $ params $ _GET-ben ül. Az op paraméter mindegyik műveletében olyan vonal jön, amelyben az aktuális művelettel kapcsolatos kezdetleges rész már el van vágva, azaz Az Alkalmazás műveletben az op karakterlánc úgy néz ki, mint az op = Cabinet / WorkSpace, és a kabinet műveletében az op string így néz ki: op = WorkSpace. Ezért a következő kód csak azt teszi, ami elválasztja az utat, keres egy beágyazottat a fent említett Init módszer által nyilvántartott között, és ha megtalálja, átvezeti az irányítást, levágja a vonal gyökér részét. Ha nem talál hibát. Ha az utolsó útpontot már elérték, akkor az alapértelmezett logikát végrehajtja. Vagyis az ExecDefault módszert hívják. Ezután végrehajtódik a Run (Futtatás) módszer, amely meghatározza a végrehajtandó logikát, függetlenül a kiválasztott útvonal változóitól. És ha hiba történt, akkor elvégezzük a HandleError metódust, átadva a hiba szövegét. A folyamat még szigorúbban szabályozza a logikát, olyan kemény, hogy nem kell örökösöket létrehoznia. A rendelkezésre álló műveleteket és állapotokat az adatbázis írja elő, például:

Először a műveleteket rögzítik, majd feldolgozzák, majd a műveletek folyamatállapotokhoz kapcsolódnak. Ez a módszer Az Init folyamat az adatbázisra vonatkozik, leolvassa a beállításokat és nyilvántartja a rendelkezésre álló műveleteket, nem mindenet, csak azokat, amelyek az aktuális állapothoz vannak kötve. Az állapotot a továbbított folyamat OID határozza meg. Ha az OID nem kerül át, akkor ez az új folyamat és az állapot = Új.

Amint azt már korábban jeleztük, az üzleti logikai rétegben nem fedjük át a folyamatosztályt, kivéve az Alkalmazásosztályt. Az OID nélkül, az aktuális felhasználóval történő kommunikáció és az oldal önmagában történő megjelenítésével inicializálódik, ellentétben azzal a folyamattal, amelyet a létrehozott oldal visszaküldi a függvényt. Az alkalmazásnak nincs helye az oldal visszaadására, így visszhangozza azt.

Mivel az alkalmazás és a folyamat önellátó, akkor a műveletek és parancsok fejlesztése továbbra is fennáll. A fenti csapatok fejlesztését már jelentették. Csak felül kell hajtanod a Exec-módszert, ezért részletesen megvizsgáljuk a műveletek fejlesztését. Csináljuk az admin példáján.

Hozzon létre egy adminisztrációs műveletet. Csatlakoztassa az alkalmazást regisztrált állapotba. A hozzáférést csak a rendszergazda fogadhatja. Ennek két módja van:

  1. Az Init módszerben hívjon be egy tárolt eljárást, amely ellenőrzi, hogy a felhasználó rendszergazda, és ha nem, létrehoz egy kivételt.
  2. Csatlakoztassa a műveletet a folyamathoz, feltéve, hogy Conditon (IsAdministrator) hozzá van adva a folyamatállapot-üzemeltetési csomaghoz. Ezután mindazok, akik nem adminisztrátorok, nem kapnak hozzáférést a művelethez

Az első módszert választjuk (pusztán például a második módszer végrehajtása során).

1. Regisztrálja az adatbázisba.

2. Hozzon létre egy adminisztrációs osztályt PHP-ben, örökölni a műveletből

Az Init módszer felülbírálása

A gyermekművelet objektum hozzáférést biztosít bármely objektum bármely műveletéhez, amelyet végrehajtani kell. De ez tovább fog történni, és most folytatni fogjuk a műveleti igazgatást. Mit tegyen ez a művelet alapértelmezés szerint? Valószínűleg kiadja az összes osztály listáját.

Zárd be az ExecDefault módszert.

Az alapértelmezés szerint az objektum műveletet fogják hívni, amely a List objektum műveletét hívja. És objektumosztály - Osztály, vagyis lefutjuk az osztály típusú objektumok listáját. Most felül kell hagynia az Oldal módszert, amely HTML-kódot ad ki a képernyőre.

Feltételezzük, hogy az oldal mindig egy beágyazott műveletet alkot.

Nem részletezem az objektum műveletének működését, egyszerűen csak megírom azokat a szavakat, amelyeket maga képvisel. Mivel az üzleti logika hierarchiája az MVC-rétegek egyike, a második kettő egy üzleti entitás és felület. Az üzleti entitások rétegének struktúrája, amit már tud. Ez egy üzleti entitás osztályok hierarchiája, és mindegyiknek van egy része szerkesztése, létrehozása, megtekintése, törlése, nyomtatása stb. Ez azt jelenti, hogy az Objektum művelet Init-eljárásának létre kell hoznia egy példányt az üzleti entitás osztályának és be kell szereznie a műveletek listáját. A művelet alapja a művelet utódja. És a végrehajtási módnak ezt a műveletet kell választania. Így az op = Admin / Object / EditOID = 1234 parancs létrehoz egy Admisitration műveletet (ha létezik hozzáférés), majd hozzon létre egy Objektum műveletet, amely létrehozza az OID paraméter által megtalált entitást és végrehajtja a Szerkesztési műveletet. Új objektum létrehozásához vagy osztályművelet hívásához meg kell adnia az OID-t, de az osztályt, például op = Admin / Objektum / Createclass = Figyelmeztetés vagy op = Admin / Objektum / Listaosztály = Aukció.