ASP.NET Modular Composite Pattern, A facebook "pattern"

A facebook  "pattern"

A Modern Kiterjeszthető Webalkalmazásról, avagy az útkeresés...


Az előző postomban arról írtam hogy milyen problémákkal kell szembenézni amikor egy modern, moduláris alkalmazást szeretnénk létrehozni.




A megoldás kutatása közben bukkantam erre a blog-ra (angol nyelvű)

Kivonatolva a bejegyzés lényege:


A modul kisebb funkcionális egység amelyekből többet összerakva a kívánt rendszer felépíthető. A modul üzleti logikát, infrastruktúrát vagy akár felhasználói felületet is definiálhat.

A kompozíció határozza meg illetve definiálja az egyes modulok közti függőségeket valamint a kommunikációt.


A modulok, illetve függőségeinek leírására számtalan módszer áll a rendelkezésünkre, de mindegyik módszernek meg vannak a maga erősségei, illetve gyengeségei.

A Microsoft-os környezetben a Web Client Software Factory áll rendelkezésre

Annak ellenére hogy jó néhány problémára lehet megoldást adni a környezet használatával van egy nagy hiányossága.
Sajnálatos módon ezzel a környezettel sem lehetséges a felhasználói felület moduláris definiciója. (a környezethez adott minta alkalmazás is mindösszesen az üzleti logikára illetve az üzleti logika függőségeire ad választ, de pl az oldalak html (aspx) erőforrásai a runtime futtatási környezetben kerültek definiálásra)

Így sajnos nem lehetséges Valóban moduláris felépítést elérni vele.
(Vessük össze a modul definíciójával: üzleti logika, infrastruktúra, felhasználói felület)



A probléma boncolgatása közben egy lehetséges alternatíva merül fel:

Amennyiben webalkalmazásról beszélünk (márpedig igen) lehetséges a felhasználói felületet iframe struktúrán keresztül dinamikusan beágyazni bármely keretrendszerbe.


A facebook, valamint a facebook alkalmazások tipikus példái ennek a megközelítésnek


Nézzük meg az egyik népszerű facebook alkalmazást (játékot) a zynga által fejlesztett Maffia Wars alkalmazást.

  • iframe-be beágyazva Cross Domain kommunikációval beépül a facebook portálba biztosítva a facebook-os modult.
  • a facebook Single Sign On szolgáltatását felhasználva biztosítja a zökkenő mentes használatot.
  • a facebook szolgáltatás API-ját felhasználva biztosítja az integrációt. (a játékbeli maffián belüli illetve azon kívüli kommunikáció)


Rendszer szinten elemezve:
  • A facebook mint keretrendszer biztosítja az API-t (szolgáltatások) illetve az iframe-et amibe a modul beágyazásra kerül.
  • A modul a facebook-tól függetlenül egy html controller szolgáltatásként kiszolgálja a kéréseket.
  • a két rendszer közti interakciót az iframe-re épülő Cross Site kommunikáció biztosítja.
  • a két rendszer közti kommunikáció a publikált API-ra épülve megoldható.



A megoldás további előnyei:

  • A keretrendszer komplexitását, tesztelhetőségét új modulok hozzáadása nem befolyásolja.
  • A modulok a rendszertől csak annak publikált szolgáltatásain keresztül függnek.
  • Az így felépített portál jól skálázható mind modul, mind keretrendszer szinten.
    Pl: A megnövekedett forgalom új szerverek munkába állításával megoldható, az ehhez szükséges technológia a webkiszolgálók terén adott. (A kapcsolódási pontok a szolgáltatások URL címei mind a két oldalon...)


Lehetséges vitatkozni, tovább elmélkedni ezen a dolgon, de egy dolog bizton állítható:
A megoldás használható lehet lehet egy moduláris alkalmazás felépítéséhez.

A facebook bizonyította:
  • A facebook nem egy kis alkalmazás, 
  • Számtalan alkalmazás (modul) kapcsolódik már most is hozzá. 
  • Sok ember használja (terhelhetőség) nap mint nap



Happy Coding