Walka ze złożonością systemów za pomocą

Transkrypt

Walka ze złożonością systemów za pomocą
Walka ze złożonością systemów
za pomocą modułowości
Marcin Karczewski
Cienki klient
Lata 80-te
Za mało mocy po
stronie klienta
Lata 90-te +
Problemy z
zarządzaniem
grubym klientem
vs
Gruby Klient
Lata 90-te
Komputery PC
przyspieszają
2000 +
Bardziej bogate UI
http://ste.india.com/sites/default/files/2015/01/10/312168-table-tennis700.gif
Wniosek #1
Uczmy się Delphi – za jakiś czas wróci do łask
http://www.ibm.com/developerworks/data/library/techarticle/dm-0312swart1/figure5.jpg
Wniosek #2
Wypracować / stosować Best Practices
http://blogs.mulesoft.org/api-best-practices-wrap-up/
SOLID
•
Single responsibility principle (Zasada jednej
odpowiedzialności)
•
Open/closed principle (Zasada otwarte-zamknięte)
•
Liskov substitution principle (Zasada podstawienia Liskov)
•
Interface segregation principle (Zasada segregacji interfejsów)
•
Dependency inversion principle (Zasada odwrócenia
zależności)
Architektura wtyczkowa / modułowa
Moduł A
Moduł D
Funkcja A
Usługa
A
Shell
Powłoka
Usługa
B
Funkcja B
Moduł C
Moduł C
Moduł B
http://slides.com/suevalov/backbone-js/embed
Open/closed principle
Open/closed principle
Zestaw narzędzi (po stronie GUI)
•
Rejestracja i ładowanie modułów
•
„Wstrzykiwanie” widoków pomiędzy modułami
•
Komunikacja pomiędzy modułami
Microsoft PRISM (WPF / Silverlight)
•
ASP.NET MVC (bardzo mało),
•
JavaScript (OOP),
•
Kendo UI Core,
•
RequireJS,
•
jQuery
Rejestracja i ładowanie modułów
Logo, nazwa systemu
Belka
menu
(lista
modułów)
Funkcjonalności
systemu /
zawartość modułów
Strony
modułu A
Potrafią tyle co Strona
bazowa…
… i jeszcze więcej
(dziedziczenie)
Strony
modułu B
Strona
bazowa
Wie jak zapytać o
moduły i ich
funkcje oraz jak je
wyświetlić
Shell /
Powłoka
Rejestrator
modułu A
Zna moduły „z
imienia i nazwiska”
Znają swoje funkcje / ekrany, wiedzą
kiedy pokazać je użytkownikowi
(uprawnienia)
Rejestrator
modułu B
Rejestrator modułu
Shell / Powłoka
Strona bazowa
Konkretna strona
Rezultat
•
Możliwość rozszerzania systemu o nowe funkcje poprzez dodawanie
niezależnych obiektów / klas / widoków,
•
Możliwość rozszerzenia rozwiązania o globalnie działające mechanizmy np.:
•
Mechanizm kontroli uprawnień,
•
Mechanizm „wstrzykiwania” widoków,
•
Itp.
Użytkownik niezalogowany…
Moduł A
Moduł B
Ekran z wybraną funkcjonalnością
Po zalogowaniu…
„Wstrzykiwanie” widoków pomiędzy
modułami
•
W module administracji, w ekranie ze szczegółami pracownika chcemy
zobaczyć listę klientów z modułu CRM, których opiekunem jest dana osoba,
•
W module sprzedaży, w ekranie z widokiem faktury chcemy zobaczyć listę
okazji biznesowych zarejestrowanych w ostatnim czasie w module CRM,
•
Itp..
Logo, nazwa systemu
Belka
menu
Funkcjonalność modułu A
Gadżet
modułu B
Gadżet modułu
C
Obiekt
wstrzykujący
Shell /
Powłoka
Ten obiekt wie który
widok, jak i gdzie
wstrzyknąć
Strona
Widok
Strona ma
przypisany widok
Gadżet
wstrzykiwany
Powłoka posiada
listę widoków
wstrzykiwanych we
wszystkich modułach
(dzięki rejestratorom
modułów)
Widok wstrzykiwany
(np. gadżet) zawiera
funkcje i kod
przekazywane do
innych modułów
Widok zawiera kod
HTML
funkcjonalności oraz
regiony
Obiekt wstrzykujący
Wstrzykiwany widok (gadżet)
Rejestrator modułu
Rejestracja widoków wstrzykiwanych
Strona bazowa
Wywołanie wstrzyknięcia widoków
Rezultat
Widok zarejestrowany
w module
administracyjnym
Widok wstrzyknięty
z modułu CRM
Komunikacja między modułami
(na poziomie UI)
•
Wyłączenie określonych funkcji w przypadku wykrycia niezapisanych zmian,
•
Odświeżanie danych w powiązanych gadżetach,
•
itp.
Wzorzec: Obserwator / Publish-Subscribe
PubSub.js
Przekazuje
komunikaty do
obserwatorów
Reaguje na
komunikaty
Widok
obserwowany
Widok
obserwujący
Powiadamia o
swoich zmianach
Widok powiadamiający o zmianach
Publikacja zdarzenia
Widok reagujący na zmiany
Reakcja na zdarzenie
Rezultat
Niezapisana
zmiana
Blokada
nawigacji
Bibliografia
•
http://onstartups.com/tabid/3339/bid/161/The-Thin-Client-Thick-Client-Cycle.aspx
•
http://blog.8thlight.com/uncle-bob/2014/05/12/TheOpenClosedPrinciple.html
•
http://msdn.microsoft.com/en-us/library/gg406140.aspx
•
http://bumbu.ru/javascript-observer-publish-subscribe-pattern
•
http://sourcemaking.com/design_patterns/observer
•
https://developer.mozilla.org/pl/docs/Web/JavaScript/Wprowadzenie_do_program
owania_obiektowego_w_jezyku_JavaScript

Podobne dokumenty