SlideShare a Scribd company logo
1 of 25
Pure MVC w AS3 Tomasz Bińkowski [email_address] 29 stycznia 2010
Spis Treści ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],/24
Istota MVC ,[object Object],[object Object],[object Object],/24
2. Opis PureMVC
[object Object],[object Object],[object Object],2. Opis PureMVC /24
2. Opis PureMVC /24 Komunikacja obiektów:
2.1. Struktura plików controller  – katalog z obiektami command model  – katalog z obiektami proxy oraz vo view  – katalog z obiektami mediator oraz pliki mxml (w przypadku Flex oraz Air) /24
2.2. Obiekt Fasady ,[object Object],[object Object],[object Object],/24
2.2. Obiekt Fasady /24 /** * Singleton ApplicationFacade */ public static function getInstance() : ApplicationFacade  { if ( instance == null ) instance = new ApplicationFacade(  ); return instance as ApplicationFacade; } /** *  Rejestruje obiekty command */ override protected function initializeController( ) : void  { super.initializeController();  registerCommand( STARTUP, ApplicationStartupCommand ); } /** * Start aplikacji **/ public function startup( app:CafeTownsend ):void { sendNotification( STARTUP, app ); }
2.2. Obiekt Fasady ,[object Object],[object Object],/24
2.2. Obiekt Fasady /24 /** * Obiekt Fasady **/ public class ApplicationFacade extends Facade { public  static const STARTUP:String = "startup"; public  static const SHUTDOWN:String = "shutdown"; public  static const APP_LOGOUT:String = "appLogout"; public  static const APP_LOGIN:String = "appLogin"; public  static const VIEW_EMPLOYEE_LOGIN:String= "viewEmployeeLogin"; public  static const VIEW_EMPLOYEE_LIST:String= "viewEmployeeList"; public  static const ADD_EMPLOYEE:String= "addEmployee"; public  static const UPDATE_EMPLOYEE:String= "updateEmployee"; public  static const SAVE_EMPLOYEE:String= "saveEmployee"; public  static const DELETE_EMPLOYEE:String= "deleteEmployee"; public
2.3. Obiekt Command ,[object Object],[object Object],[object Object],/24
2.3. Obiekt Command /24 /** * Rejestracja Proxy **/ override public function execute( note:INotification ) :void  { facade.registerProxy( new EmployeeProxy()); facade.registerProxy( new UserProxy()); } /** * Rejestracja Mediatorów i  pobranie danych **/ override public function execute( note:INotification ) :void  { facade.registerMediator(  new ApplicationMediator( note.getBody() ) );  var employeeProxy:EmployeeProxy = facade.retrieveProxy(  EmployeeProxy.NAME ) as EmployeeProxy; employeeProxy.loadEmployees(); sendNotification( ApplicationFacade.VIEW_EMPLOYEE_LOGIN ); }
2.4. Obiekt Proxy ,[object Object],[object Object],[object Object],/24
2.4. Obiekt Proxy /24 /** * Funkcja wywołująca obiekt pobierający dane **/ public function loadEmployees():void { var delegate : LoadEmployeesDelegate = new LoadEmployeesDelegate( this ); delegate.loadEmployeesService(); } / ** * Poprawne pobranie danych, wysyła notyfikację do systemu **/ public function result( rpcEvent : Object ) : void { data = rpcEvent.result.employees.employee  as ArrayCollection; sendNotification( ApplicationFacade.LOAD_EMPLOYEES_SUCCESS ); } /** * Błąd podczas pobierania danych, wysyła notyfikację do systemu **/ public function fault( rpcEvent : Object ) : void  { data =  new ArrayCollection(); errorStatus =  "Could Not Load Employee List!"; sendNotification( ApplicationFacade.LOAD_EMPLOYEES_FAILED ); }
2.5. Obiekt Mediator ,[object Object],[object Object],[object Object],[object Object],[object Object],/24
2.5. Obiekt Mediator /24 override public function listNotificationInterests():Array  {  return [ ApplicationFacade.VIEW_EMPLOYEE_LOGIN, ApplicationFacade.VIEW_EMPLOYEE_LIST, ApplicationFacade.VIEW_EMPLOYEE_DETAIL, ApplicationFacade.APP_LOGOUT, ApplicationFacade.UPDATE_EMPLOYEE ]; } override public function handleNotification( note:INotification ):void  { switch ( note.getName() )  {  case ApplicationFacade.VIEW_EMPLOYEE_LOGIN: app.vwStack.selectedIndex = EMPLOYEE_LOGIN; break; case ApplicationFacade.VIEW_EMPLOYEE_LIST: employeeProxy.employee =  null; app.vwStack.selectedIndex = EMPLOYEE_LIST; break; } }
2.6. Notification ,[object Object],[object Object],[object Object],[object Object],/24
3.  MultiCore
3. Multicore ,[object Object],[object Object],[object Object],[object Object],/24
3. Multicore /24 /** * Pobranie instancji Fasady danej aplikacji **/ public static function getInstance( key:String ) : ApplicationFacade  { if ( instanceMap[ key ] == null ) instanceMap[ key ]  = new ApplicationFacade( key ); return instanceMap[ key ] as ApplicationFacade; } /** * Start aplikacji *  *  @param app  referencja do modułu w aplikacji */  public function startup( app: Module1  ):void { sendNotification( STARTUP, app ); }
4.  Zastosowanie
4.1. Zalety i Wady ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],/24
[object Object],[object Object],[object Object],[object Object],4.2. Przykłady aplikacji /24
Kontakt ul. Wita Stwosza 40, 02-661 Warszawa tel. 22 646 76 84 fax 22 856 51 01 e-mail: info@mediovski.pl www.mediovski.pl

More Related Content

Similar to Pure MVC - Mediovski

Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji androidSages
 
Drupal Context - Agnieszka Cupek
Drupal Context - Agnieszka CupekDrupal Context - Agnieszka Cupek
Drupal Context - Agnieszka CupekGrzegorz Bartman
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Quick-Solution
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
MvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.AndroidMvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.AndroidIn'saneLab
 
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuGrzegorz Bartman
 
Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.Future Processing
 
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposePrzenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposeMariusz Bąk
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...Future Processing
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITRedge Technologies
 
J2ME. Java dla urządzeń mobilnych. Ćwiczenia
J2ME. Java dla urządzeń mobilnych. ĆwiczeniaJ2ME. Java dla urządzeń mobilnych. Ćwiczenia
J2ME. Java dla urządzeń mobilnych. ĆwiczeniaWydawnictwo Helion
 
Środowisko testowe pod REST-a
Środowisko testowe pod REST-aŚrodowisko testowe pod REST-a
Środowisko testowe pod REST-aFuture Processing
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?tkryskiewicz
 
Seam framework in_action
Seam framework in_actionSeam framework in_action
Seam framework in_actionMichał Orman
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalnePROSKAR
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Maciej Zbrzezny
 

Similar to Pure MVC - Mediovski (20)

Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Drupal Context - Agnieszka Cupek
Drupal Context - Agnieszka CupekDrupal Context - Agnieszka Cupek
Drupal Context - Agnieszka Cupek
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
MvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.AndroidMvvmCross na przykładach w Xamarin.Android
MvvmCross na przykładach w Xamarin.Android
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
 
Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.
 
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposePrzenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
 
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
 
J2ME. Java dla urządzeń mobilnych. Ćwiczenia
J2ME. Java dla urządzeń mobilnych. ĆwiczeniaJ2ME. Java dla urządzeń mobilnych. Ćwiczenia
J2ME. Java dla urządzeń mobilnych. Ćwiczenia
 
Środowisko testowe pod REST-a
Środowisko testowe pod REST-aŚrodowisko testowe pod REST-a
Środowisko testowe pod REST-a
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
 
Seam framework in_action
Seam framework in_actionSeam framework in_action
Seam framework in_action
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0
 

Pure MVC - Mediovski

  • 1. Pure MVC w AS3 Tomasz Bińkowski [email_address] 29 stycznia 2010
  • 2.
  • 3.
  • 5.
  • 6. 2. Opis PureMVC /24 Komunikacja obiektów:
  • 7. 2.1. Struktura plików controller – katalog z obiektami command model – katalog z obiektami proxy oraz vo view – katalog z obiektami mediator oraz pliki mxml (w przypadku Flex oraz Air) /24
  • 8.
  • 9. 2.2. Obiekt Fasady /24 /** * Singleton ApplicationFacade */ public static function getInstance() : ApplicationFacade { if ( instance == null ) instance = new ApplicationFacade( ); return instance as ApplicationFacade; } /** * Rejestruje obiekty command */ override protected function initializeController( ) : void { super.initializeController(); registerCommand( STARTUP, ApplicationStartupCommand ); } /** * Start aplikacji **/ public function startup( app:CafeTownsend ):void { sendNotification( STARTUP, app ); }
  • 10.
  • 11. 2.2. Obiekt Fasady /24 /** * Obiekt Fasady **/ public class ApplicationFacade extends Facade { public static const STARTUP:String = "startup"; public static const SHUTDOWN:String = "shutdown"; public static const APP_LOGOUT:String = "appLogout"; public static const APP_LOGIN:String = "appLogin"; public static const VIEW_EMPLOYEE_LOGIN:String= "viewEmployeeLogin"; public static const VIEW_EMPLOYEE_LIST:String= "viewEmployeeList"; public static const ADD_EMPLOYEE:String= "addEmployee"; public static const UPDATE_EMPLOYEE:String= "updateEmployee"; public static const SAVE_EMPLOYEE:String= "saveEmployee"; public static const DELETE_EMPLOYEE:String= "deleteEmployee"; public
  • 12.
  • 13. 2.3. Obiekt Command /24 /** * Rejestracja Proxy **/ override public function execute( note:INotification ) :void { facade.registerProxy( new EmployeeProxy()); facade.registerProxy( new UserProxy()); } /** * Rejestracja Mediatorów i pobranie danych **/ override public function execute( note:INotification ) :void { facade.registerMediator( new ApplicationMediator( note.getBody() ) ); var employeeProxy:EmployeeProxy = facade.retrieveProxy( EmployeeProxy.NAME ) as EmployeeProxy; employeeProxy.loadEmployees(); sendNotification( ApplicationFacade.VIEW_EMPLOYEE_LOGIN ); }
  • 14.
  • 15. 2.4. Obiekt Proxy /24 /** * Funkcja wywołująca obiekt pobierający dane **/ public function loadEmployees():void { var delegate : LoadEmployeesDelegate = new LoadEmployeesDelegate( this ); delegate.loadEmployeesService(); } / ** * Poprawne pobranie danych, wysyła notyfikację do systemu **/ public function result( rpcEvent : Object ) : void { data = rpcEvent.result.employees.employee as ArrayCollection; sendNotification( ApplicationFacade.LOAD_EMPLOYEES_SUCCESS ); } /** * Błąd podczas pobierania danych, wysyła notyfikację do systemu **/ public function fault( rpcEvent : Object ) : void { data = new ArrayCollection(); errorStatus = "Could Not Load Employee List!"; sendNotification( ApplicationFacade.LOAD_EMPLOYEES_FAILED ); }
  • 16.
  • 17. 2.5. Obiekt Mediator /24 override public function listNotificationInterests():Array { return [ ApplicationFacade.VIEW_EMPLOYEE_LOGIN, ApplicationFacade.VIEW_EMPLOYEE_LIST, ApplicationFacade.VIEW_EMPLOYEE_DETAIL, ApplicationFacade.APP_LOGOUT, ApplicationFacade.UPDATE_EMPLOYEE ]; } override public function handleNotification( note:INotification ):void { switch ( note.getName() ) { case ApplicationFacade.VIEW_EMPLOYEE_LOGIN: app.vwStack.selectedIndex = EMPLOYEE_LOGIN; break; case ApplicationFacade.VIEW_EMPLOYEE_LIST: employeeProxy.employee = null; app.vwStack.selectedIndex = EMPLOYEE_LIST; break; } }
  • 18.
  • 20.
  • 21. 3. Multicore /24 /** * Pobranie instancji Fasady danej aplikacji **/ public static function getInstance( key:String ) : ApplicationFacade { if ( instanceMap[ key ] == null ) instanceMap[ key ] = new ApplicationFacade( key ); return instanceMap[ key ] as ApplicationFacade; } /** * Start aplikacji * * @param app referencja do modułu w aplikacji */ public function startup( app: Module1 ):void { sendNotification( STARTUP, app ); }
  • 23.
  • 24.
  • 25. Kontakt ul. Wita Stwosza 40, 02-661 Warszawa tel. 22 646 76 84 fax 22 856 51 01 e-mail: info@mediovski.pl www.mediovski.pl