MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

Benzer belgeler
MVP ve Mediator ile Loose Coupled, Modüler UI Geliştirme

MVC, MVP ve Mediator ile TDD Tecrübeleri. Kenan SEVİNDİK

Spring Ekosisteminde Kurumsal Yazılım Geliştirme. Kenan Sevindik Harezmi Bilişim Çözümleri A.Ş.

MVC, MVP ve Mediator ile TDD Tecrübeleri

Client Server Database

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

Dinamik Proxy Tabanlı View Model API

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4

.com. Özcan Acar 2009 Kurumsal Java.com

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

Web Uygulamaları Mimarileri ve Güvenliği

Spring Application Framework Harezmi Bilişim Çözümleri

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

Burak Kıymaz JAVA FX

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

CENG 302 Yazılım Mühendisliği Yazılım Mimarisi - Devam. Alper UĞUR

Görsel Programlama DERS 08. Görsel Programlama - Ders08/ 1

Java EE 5 Teknolojileri Jboss Seam

Java ile Tasarım Prensipleri ve Tasarım Örüntüleri

JBoss Seam. Melih Sakarya

UYGULA İÇİ SATIN ALMA. <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="com.android.vending.

Üst Düzey Programlama

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

MyFaces Özgür JSF Uyarlaması. Bora Güngören Portakal Teknoloji

JBoss Seam Next Generation Integration Framework

ÖZGÜR YAZILIMLAR İLE J2EE

Intercepting Filter Tasarım Şablonu KurumsalJava.com

Kurumsal Bilgi Sistemleri ve Güvenlik 1/ 36

Rahman USTA Editör Altuğ B. ALTINTAŞ Papatya Yayıncılık Eğitim

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme Emrah Ayanoğlu, Onur Özcan, Alperen Eraslan. Inet-TR 12 9 Kasım 2012

Android Kaynakları (Resources)

Java. Hakkımızda. Java Eğitimi

Ben Sine CANBOLAT Türk Hava Kurumu Üniverstesi nde araştırma görevlisi olarak çalışmaktayım. Sizlere «E-Devlet Yazılım Çerçevesi: Sektörel Kazanımlar

İÇERİK. Amaç. Kapsam. Süreç. Teknik Mimari. Faydalar

ĐSTEMCĐ SUNUCU SĐSTEMLER DERSĐ FĐNAL ÇALIŞMASI SORULAR YANITLAR

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

Android e Giriş. Öğr.Gör. Utku SOBUTAY

1.1. Referans Kodu: TBTK.KAMU-SM / AR-GE Personeli: Kamu Sertifikasyon Merkezinde yürütülen projelerde;


ESİS Projesi. Kaynaklar Bakanlığı

Chapter 6 Mimari Tasarım. Lecture 1. Chapter 6 Architectural design

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Java da. ve AWT ve SWING Kütüphaneleri. BBS-515 Nesneye Yönelik Programlama. Ders #8 (9 Aralık 2009)

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

SDD Dökümantasyonu Versࠀyon 1.0. Movࠀe Predࠀctࠀon Orhan Özgün Ergen Ahmet Saday Berkay Erken

Özcan Acar 2009 Kurumsal Java.com

Kitapta UML diyagramları kullanılarak, tasarım şablonları görsel olarak açıklanmıştır. İçerik aşağıdaki bölümlerden oluşmaktadır:

3 ANGULARJS UYGULAMA VE MODULE YAPISI 25 Dependency Injection 28 Routing 31 Scope Kavramı 33 Digest Loop, Model ve Scope İlişkisi 35

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Spring Framework Eğitimi

Ders 8 Konu Özeti ve Problemler

Mesleki Terminoloji YTÜ Bilgisayar Mühendisliği Muhammet Küçük YTÜ Bilgisayar Mühendisliği 93 Mezunu

TCMB Deneyim Raporu. Kurumsal Java Uygulama Platformu. Sacit Uluırmak. Türkiye Cumhuriyet Merkez Bankası Sistem Araştırma ve Planlama Müdürlüğü

Spring Security Framework Harezmi Bilişim Çözümleri

Spring Application Framework e Giriş

1. Bölüm Spring'e Giriş

One ASP.NET. 5 bileşen barındırmaktadır. Web Forms Model View Controller (MVC) Web Pages Web API SignalR

Özcan Acar 2010 Kurumsal Java Akademisi.com

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

YZM 3215 İleri Web Programlama

MVC. Görüldüğü üzere 2 adet cs. Dosyası oluşturdum. Birincisi çok satır kodu (20-25) içeren büyük işlerin yapılacağı class. İsmi buyuk_isler.

Java Dersi. Altuğ Bilgin Altıntaş

Üst Düzey Programlama

YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

Spring Framework Eğitimi

Spring Framework Eğitimi

JAVA RMI ve Hibernate teknolojileri kullanılarak çok amaçlı bir yazılım altyapısı hazırlanması

TÜMLEŞİK MODELLEME DİLİ. UML (Unified Modeling Language)

Rails İle Ağ Uygulamaları Geliştirimi

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

HTML isteklerini anlayarak HTML sonucu üreten ve yaygın olarak kullanılan temel Servlet sınıfı HttpServlet tir.

Java Programlama Giriş

DOOB: RAHAT Ürün Olarak Komuta Kontrol Yazılımı ve Geliştirme Deneyimleri

Oyun Programlama. Tasarım Örüntüleri

Gömülü Sistemlerde Model-View-Controller (MVC) Kullanımı

YZM 3215 İleri Web Programlama

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

JavaFX Temelleri (2)

TÜRKİYE ELEKTRONİK FON ALIM SATIM PLATFORMU WEB SERVİS İŞLEMLERİ

Dünyayı Değiştiren Yenilikçi Teknolojiler ve Çözümler. ETGi Tanıtım Sunumu. ETGi: Eğitim Teknolojileri Ve Görüntülü İletişim.

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

JavaServer Faces (JSF) Sunucu Yazılım Teknolojileri 2008

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Business Delegate Tasarım Şablonu KurumsalJava.com

Temel JavaFX Bileşenleri (1) Labeled, Label, Button, ToggleButton, RadioButton, ToggleGroup, CheckBox, ComboBox, Slider, ListView ve SelectionModel

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

Görsel Programlama DERS 07. Görsel Programlama - Ders07/ 1

MOBİL UYGULAMA GELİŞTİRME

BİL-141 Bilgisayar Programlama I (Java)

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

İŞTİRAKLER BİLGİ ODAKLI YÖNETİŞİM SİSTEMİ KURULMASI PROJESİ (İVAS) SON KULLANICI VERİ GİRİŞ YARDIMCI DOKÜMANI

Glade. hitokiri. Eylül, 2012

Sosyal Mecralarda ki Çalışan Davranışı, Marka Algısını ve Deneyim Tasarımını Doğrudan Etkiler

Kablosuz Algılayıcı Ağları İçin TinyOS İle Uygulama Geliştirme

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10. Yrd.Doç.Dr.Hacer Karacan

Transkript:

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var Pek çok projenin geliştirilmesinde görev aldı Object Oriented ve Aspect Oriented Programlama, Tasarım Örüntüleri gibi konularda, Spring, Spring Security, Hibernate, Vaadin gibi kurumsal Java teknolojilerinde bilgi birikimi ve deneyime sahip

Kenan Sevindik Kimdir? Beginning Spring kitabının yazarlarından 2011 yılında Harezmi Bilişim Çözümlerini kurdu Kurumsal uygulama geliştirme faaliyetleri yürütüyor Danışmanlık ve koçluk hizmetleri sunuyor Kurumsal Java Eğitimleri adı altında eğitimler düzenliyor

Mimarisel Bir Örüntü: MVC Controller Kullanıcı girdileri ve UI olayları Veri değişiklikleri Bildirimler Model View Veri erişimi

MVC & Observer Observer 1 notify notify Subject Observer 2 notify Observer 3 Subject changed...

MVC'nin Temel İşlevi Seperation of Concern

Kurumsal Uygulamalarda Katmanlı Mimari UI Service DAO DB

Kurumsal Java Dünyasında MVC Yorumlaması Controller Model View User Web MVC veya MVC2 olarak adlandırılmıştır

Web MVC ve Front Controller Web Container request handle delegate request request Request Front Controller Handler model response create model model render response View Struts, Spring MVC, JSF gibi pek çok Web Framework'üne temel teşkil etmiştir

Kurumsal Uygulamalarda Katmanlı Mimari Presentation Controller Service DAO DB

Katmanlı Mimari ve Modülerlik Finans Personel Presentation Controller Service DAO DB Doküman

Katmanlı Mimari ve Modülerlik Presentation Presentation Presentation Controller Controller Controller Service Service Service DAO DAO DAO DB

Katmanlı Mimari ve Modülerlik Presentation Presentation Presentation Controller Controller Controller Service DAO DB

Katmanlı Mimari ve Modülerlik Presentation Presentation Presentation Controller Controller Controller Service Service Service DAO DAO DAO DB

Bileşenler Arasındaki Etkileşim Bileşen Bileşen Bileşen

Bileşenler Arasındaki Etkileşim Bileşen Bileşen Bileşen Bileşen Bileşen

MVC'nin Problemleri MVC örüntüsü, mimarisel olarak sistemi işlevsel açıdan modülerize etmeye yardımcı olmaktadır Ancak kullanıcı etkileşimlerinin fonksiyonel davranışa nasıl dönüştürüleceği ile ilgili net bir yol gösterememektedir Bileşenler arasındaki iletişimi düzenleyememektedir ve bileşenlerin birbirleri ile aralarındaki bağımlılıkları da tam olarak ortadan kaldıramamaktadır

Çözüm: MVP + Mediator MVC'nin bir varyasyonu olan MVP, kullanıcı arayüzünün gösterimi ve fonksiyonel davranışların birbirlerinden bağımsız biçimde ele alınabilmesini sağlamaktadır Mediator ise bileşenler arasındaki iletişimi düzenleyip, bağımlılıkları ortadan kaldırmaktadır

Model View Presenter UI event'leri uygulamaya özel business event'lere dönüştürülür Presenter View UI üzerindeki değişiklikler Presenter tarafından yansıtılır Model üzerindeki değişiklikler Event'ler ile Presenter'a iletilir Presenter Model üzerinde değişiklik yapabilir Model verisine erişebilir Model

Bileşenler Arasındaki Etkileşim Kaosu

Mediator

Mediator Sonrası Bileşenler Arasındaki Etkileşim Bileşen notify event publish Bileşen Mediator Bileşen notify notify notify Bileşen Bileşen

Mediator Sonrası Bileşenler Arasındaki Etkileşim Presentation Presentation Presentation Controller Controller Controller Service DAO Event Context (Event & Model) Service DAO DB Event Context (Event & Model) Service DAO

Örnek: Adres Bilgileri Yönetim Ekranı Address Detail View Address List View Address ToolBar View

Mediator public class Mediator { private Collection<Presenter> listeners = new ArrayList<Presenter>(); public void addlistener(presenter listener) { listeners.add(listener); public void removelistener(presenter listener) { listeners.remove(listener); public void publish(businessevent event) { for(presenter listener:listeners) { listener.handle(event);

Presenter public interface public void Presenter { handle(businessevent event);

Adım 1: Mediator Registration ListView DetailView ListPresenter Detail Presenter Mediator Bileşen, diğer bileşenlerdeki değişikliklerden haberdar olmak için kendisini mediator'a register eder ToolBar Presenter ToolBar View Bileşen, diğer bileşenlerdeki değişikliklerden haberdar olmak için kendisini mediator'a register eder Bileşen, diğer bileşenlerdeki değişikliklerden haberdar olmak için kendisini mediator'a register eder

Address List Presenter public class AddressListPresenter implements Presenter { private AddressListView view; private Mediator mediator; public AddressListPresenter(AddressListView view, Mediator mediator) { this.view = view; this.mediator = mediator; mediator.addlistener(this); @Override public void handle(businessevent event) {...

Address Detail Presenter public class AddressDetailPresenter implements Presenter { private AddressDetailView view; private Mediator mediator; public AddressDetailPresenter(AddressDetailView view, Mediator mediator) { this.view = view; this.mediator = mediator; mediator.addlistener(this); @Override public void handle(businessevent event) {...

Address ToolBar Presenter public class AddressToolBarPresenter implements Presenter { private AddressToolBarView view; private Mediator mediator; public AddressToolBarPresenter(AddressToolBarView view, Mediator mediator) { this.view = view; this.mediator = mediator; mediator.addlistener(this); @Override public void handle(businessevent event) {...

Adım 2:UI Interaction (Item Select) Listeden herhangi bir item'ın seçilmesi bir UI event tetikler ListView UI event, doğrudan bir business event'e dönüştürülür ve mediator üzerinden fire edilir DetailView ListPresenter Detail Presenter ToolBar Presenter ToolBar View Mediator

Address List View public class AddressListView implements ValueChangeListener { public AddressListView(Mediator mediator) { this.mediator = mediator; @Override public void valuechange(valuechangeevent event) { Address address = (Address) table.getvalue(); AddressSelectedEvent selectedevent = new AddressSelectedEvent(address); mediator.publish(selectedevent);...

Adım 3:Event Notification (Address Selected) ListView DetailView Mediator business event ile ilgilenen diğer bileşenleri haberdar eder ListPresenter Mediator UI state güncellenir ToolBar Presenter ToolBar View Mediator business event ile ilgilenen diğer bileşenleri haberdar eder Presenter'lar business event'in işaret ettiği iş mantığını servis katmanı üzerinden yürütürler UI state güncellenir Detail Presenter Service DAO

Address Detail Presenter public class AddressDetailPresenter implements Presenter { @Override public void handle(businessevent event) { if(event instanceof AddressSelectedEvent) { AddressSelectedEvent selectedevent = (AddressSelectedEvent)event; Address address = selectedevent.getselectedaddress(); view.displayaddress(address);...

Address ToolBar Presenter public class AddressToolBarPresenter implements Presenter { @Override public void handle(businessevent event) { if(event instanceof AddressSelectedEvent) { AddressSelectedEvent selectedevent = (AddressSelectedEvent)event; Address address = selectedevent.getselectedaddress(); view.switchtoupdatemode(); view.setaddress(address);...

Address Selected

Adım 2:UI Interaction (Update Button Click) ListView DetailView ListPresenter Detail Presenter Mediator ToolBar Presenter Bir buton'a tıklanması UI event tetikler ToolBar View UI event, doğrudan bir business event'e dönüştürülür ve mediator üzerinden fire edilir

Address ToolBar View public class AddressToolBarView implements ClickListener { public AddressToolBarView(Mediator mediator) { this.mediator = mediator; @Override public void buttonclick(clickevent event) { if(event.getbutton() == updatebutton) { AddressUpdateEvent updateevent = new AddressUpdateEvent(address); mediator.publish(updateevent);...

Adım 3:Event Notification (Address Update) Service Presenter'lar business event'in işaret ettiği iş mantığını servis katmanı üzerinden yürütürler ListView UI state güncellenir DAO DetailView Mediator business event ile ilgilenen diğer bileşenleri haberdar eder ListPresenter ToolBar Presenter Mediator ToolBar View Mediator business event ile ilgilenen diğer bileşenleri haberdar eder UI state güncellenir Detail Presenter

Address List Presenter public class AddressListPresenter implements Presenter { @Override public void handle(businessevent event) { if(event instanceof AddressUpdateEvent) { AddressUpdateEvent updateevent = (AddressUpdateEvent)event; Address address = updateevent.getaddress(); view.reloadaddress(address);...

Address ToolBar Presenter public class AddressToolBarPresenter implements Presenter { @Override public void handle(businessevent event) { if(event instanceof AddressSelectedEvent) { AddressSelectedEvent selectedevent = (AddressSelectedEvent)event; Address address = selectedevent.getselectedaddress(); view.switchtoupdatemode(); view.setaddress(address); else if(event instanceof AddressUpdateEvent) { view.switchtoselectionmode();...

Address Updated

Soru & Cevap

İletişim Harezmi Bilişim Çözümleri A.Ş. http://www.harezmi.com.tr info@harezmi.com.tr