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

Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Jul 20, 2015

Download

Software

Kenan Sevindik
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

MVP, Observer ve Mediator Örüntüleri ile

Yeniden Kullanılabilir Uygulama Bileşenleri

Geliştirme

Page 2: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Kenan Sevindik Kimdir?

● 15 yıllık kurumsal uygulama geliştirme deneyimi var

● Çeşitli projelerin mimarilerinin oluşturulmasında görev aldı

● Spring, Spring Security, Hibernate, Vaadin gibi kurumsal Java teknolojilerinde kapsamlı bilgi birikimi ve deneyime sahip

Page 3: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

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üyoruz

● Danışmanlık ve koçluk hizmetleri sunuyoruz

● Kurumsal Java Eğitimleri adı altında eğitimler düzenliyoruz

Page 4: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Katmanlı Mimari

UI

Service

DAO

DB

Page 5: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Controller

Veri değişiklikleri

Kullanıcı girdilerive UI olayları

Bildirimler

Veri erişimi

Model View

Mimarisel Bir Örüntü: MVC

Page 6: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

MVC & Observer

Subject

Observer 1

Observer 2

Observer 3

Subject changed...

notify

notify

notify

Page 7: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

MVC'nin Temel İşlevi

“Seperation of Concern”

Page 8: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Günümüzdeki MVC Yorumlaması

Controller

View

Model

User

Page 9: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Front Controller

Front ControllerRequestHandler

View

model

request

response

delegate request handlerequest

createmodel

modelrenderresponse

Web Container

Page 10: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Katmanlı Mimari

Controller

Service

DAO

DB

Presentation

Page 11: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Katmanlı Mimari ve Modülerlik

Controller

Service

DAO

DB

Presentation

Page 12: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Katmanlı Mimari ve Modülerlik

DB

Controller

Service

DAO

Presentation

Controller

Service

DAO

Presentation

Controller

Service

DAO

Presentation

Page 13: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Katmanlı Mimari ve Modülerlik

Service

DAO

DB

Controller

Presentation

Controller

Presentation

Controller

Presentation

Page 14: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Katmanlı Mimari ve Modülerlik

DB

Controller

Presentation

Service

DAO

Controller

Presentation

Controller

Presentation

Service

DAO

Service

DAO

Page 15: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Bileşenler Arasındaki Etkileşim

Bileşen

Bileşen

Bileşen

Page 16: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Bileşenler Arasındaki Etkileşim

Bileşen

BileşenBileşen

Bileşen

Bileşen

Page 17: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

MVC'nin Problemleri

● MVC örüntüsü, mimarisel olarak sistemi işlevsel açıdan modülerize etmektedir

● Ancak kullanıcı etkileşimlerinin fonksiyonel davranışa nasıl dönüştürüleceği ile ilgili net bir yol göstermemektedir

● Bileşenler arasındaki iletişimi düzenleyememektedir ve bileşenlerin birbirleri ile aralarındaki bağımlılıkları ortadan kaldıramamaktadır

Page 18: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Çö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

Page 19: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Model View Presenter

Presenter

Model

UI event'leri uygulamaya özel business event'lere dönüştürülür

UI üzerindeki değişikliklerPresenter tarafından yansıtılır

Model üzerindekideğişikliklerEvent'lerile Presenter'ailetilir

PresenterModel üzerindedeğişiklikyapabilir

Model verisineerişebilir

View

Page 20: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Bileşenler Arasındaki Etkileşim

Page 21: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator

Page 22: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator Sonrası Bileşenler Arasındaki Etkileşim

Bileşen

BileşenBileşen

Bileşen

Bileşen

Mediator

event publish

notify

notify

notify

notify

Page 23: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator Sonrası Bileşenler Arasındaki Etkileşim

DB

Controller

Presentation

Service

DAO

Controller

Presentation

Controller

Presentation

Service

DAO

Service

DAO

EventContext(Event

&Model)

EventContext

(Event&

Model)

Page 24: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Örnek: Adres Bilgileri Yönetim Ekranı

AddressListView

AddressDetailView

Address ToolBar View

Page 25: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediatorpublic 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);}

}}

Page 26: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator

ListView

ListPresenter

Bileşen, diğer bileşenlerdekideğişikliklerden haberdar olmakiçin kendisini mediator'a registereder

Tool

Bar

Pre

sent

er

Tool

Bar

Vie

w

DetailView

DetailPresenter

Bileşen, diğer bileşenlerdekideğişikliklerden haberdar olmakiçin kendisini mediator'a registereder

Bileşen, diğer bileşenlerdekideğişikliklerden haberdar olmakiçin kendisini mediator'a registereder

Adım 1: Mediator Registration

Page 27: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address List Presenterpublic class AddressListPresenter implements Presenter {

private AddressListView view;

public AddressListPresenter(AddressListView view,Mediator mediator) {

this.view = view;mediator.addListener(this);

}

@Overridepublic void handle(BusinessEvent event) {

...}

}

Page 28: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address Detail Presenterpublic class AddressDetailPresenter implements Presenter {

private AddressDetailView view;

public AddressDetailPresenter(AddressDetailView view, Mediator mediator) {

this.view = view;mediator.addListener(this);

}

@Overridepublic void handle(BusinessEvent event) {

...}

}

Page 29: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address ToolBar Presenterpublic class AddressToolBarPresenter implements Presenter {

private AddressToolBarView view;

public AddressToolBarPresenter(AddressToolBarView view, Mediator mediator) {

this.view = view;mediator.addListener(this);

}

@Overridepublic void handle(BusinessEvent event) {

...}

}

Page 30: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator

ListView

ListPresenter

Listeden herhangi bir item'ınseçilmesi bir UI event tetikler

UI event, doğrudan birbusiness event'e dönüştürülürve mediator üzerinden fire edilir

Tool

Bar

Pre

sent

er

Tool

Bar

Vie

w

DetailView

DetailPresenter

Adım 2:UI Interaction (Item Select)

Page 31: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address List Viewpublic class AddressListView implements ValueChangeListener {

public AddressListView(Mediator mediator) {this.mediator = mediator;

}

@Overridepublic void valueChange(ValueChangeEvent event) {

Address address = (Address) table.getValue();

AddressSelectedEvent selectedEvent = new AddressSelectedEvent(address);

mediator.publish(selectedEvent);}

...}

Page 32: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator

ListView

ListPresenter

UI stategüncellenir

DetailView

DetailPresenter

UI stategüncellenir

Tool

Bar

Pre

sent

er

Tool

Bar

Vie

w

Mediator business eventile ilgilenen diğerbileşenleri haberdareder

Mediator business eventile ilgilenen diğerbileşenleri haberdareder

DAO

ServicePresenter'larbusiness event'inişaret ettiği işmantığını serviskatmanı üzerindenyürütürler

Adım 3:Event Notification (Address Selected)

Page 33: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address Detail Presenterpublic class AddressDetailPresenter implements Presenter {

@Overridepublic void handle(BusinessEvent event) {

if(event instanceof AddressSelectedEvent) {AddressSelectedEvent selectedEvent =

(AddressSelectedEvent)event;Address address =

selectedEvent.getSelectedAddress();view.displayAddress(address);

}}

...}

Page 34: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address ToolBar Presenterpublic 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);

}}

...}

Page 35: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address Selected

Page 36: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator

ListView

ListPresenter

Tool

Bar

Pre

sent

er

Tool

Bar

Vie

w

DetailView

DetailPresenter

Bir buton'atıklanması UIevent tetikler

UI event, doğrudan birbusiness event'e dönüştürülürve mediator üzerinden fire edilir

Adım 2:UI Interaction (Button Click)

Page 37: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address ToolBar Viewpublic class AddressToolBarView implements ClickListener {

public AddressToolBarView(Mediator mediator) {this.mediator = mediator;

}

@Overridepublic void buttonClick(ClickEvent event) {

if(event.getButton() == updateButton) {AddressUpdateEvent updateEvent =

new AddressUpdateEvent(address);mediator.publish(updateEvent);

}}

...}

Page 38: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Mediator

ListView

ListPresenter

UI stategüncellenir

Mediator business eventile ilgilenen diğerbileşenleri haberdareder

Tool

Bar

Pre

sent

er

Tool

Bar

Vie

w

DetailView

DetailPresenter

UI stategüncellenir

Mediator business eventile ilgilenen diğerbileşenleri haberdareder

Adım 3:Event Notification(Address Update)

DAO

Service

Presenter'larbusiness event'inişaret ettiği işmantığını serviskatmanı üzerindenyürütürler

Page 39: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address List Presenterpublic class AddressListPresenter implements Presenter {

@Overridepublic void handle(BusinessEvent event) {

if(event instanceof AddressUpdateEvent) {AddressUpdateEvent updateEvent =

(AddressUpdateEvent)event;

Address address = updateEvent.getAddress();

view.reloadAddress(address);

}}

...}

Page 40: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address ToolBar Presenterpublic 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();

}}...

}

Page 41: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Address Updated

Page 42: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

Soru & Cevap

Page 43: Developing Reusable Software Components Using MVP, Observer and Mediator Patterns at VoxxedDays Istanbul 2015

İletişim

● Harezmi Bilişim Çözümleri A.Ş.● http://www.harezmi.com.tr● [email protected]