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