SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Similaire à Pure MVC - Mediovski

Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
Przemysław ...
 
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
Wydawnictwo Helion
 

Similaire à 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