mvp, observer ve mediator Örüntüleri ile yeniden ......kenan sevindik kimdir? 1999 odtÜ...

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

Upload: others

Post on 17-Jun-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

Yeniden Kullanılabilir Uygulama Bileşenleri

Geliştirme

Page 2: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

Page 3: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

Page 4: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Controller

Veri değişiklikleri

Kullanıcı girdilerive UI olayları

Bildirimler

Veri erişimi

Model View

Mimarisel Bir Örüntü: MVC

Page 5: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

MVC & Observer

Subject

Observer 1

Observer 2

Observer 3

Subject changed...

notify

notify

notify

Page 6: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

MVC'nin Temel İşlevi

“Seperation of Concern”

Page 7: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Kurumsal Uygulamalarda Katmanlı Mimari

UI

Service

DAO

DB

Page 8: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Kurumsal Java Dünyasında MVC Yorumlaması

Controller

View

Model

User

Web MVC veya MVC2 olarak adlandırılmıştır

Page 9: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Web MVC ve Front Controller

Front ControllerRequestHandler

View

model

request

response

delegate request handlerequest

createmodel

modelrenderresponse

Web Container

Struts, Spring MVC, JSF gibi pek çok Web Framework'üne temel teşkil etmiştir

Page 10: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Kurumsal Uygulamalarda Katmanlı Mimari

Controller

Service

DAO

DB

Presentation

Page 11: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Katmanlı Mimari ve Modülerlik

Controller

Service

DAO

DB

Presentation

Finans Personel Doküman

Page 12: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Katmanlı Mimari ve Modülerlik

DB

Controller

Service

DAO

Presentation

Controller

Service

DAO

Presentation

Controller

Service

DAO

Presentation

Page 13: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Katmanlı Mimari ve Modülerlik

Service

DAO

DB

Controller

Presentation

Controller

Presentation

Controller

Presentation

Page 14: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Katmanlı Mimari ve Modülerlik

DB

Controller

Presentation

Service

DAO

Controller

Presentation

Controller

Presentation

Service

DAO

Service

DAO

Page 15: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Bileşenler Arasındaki Etkileşim

Bileşen

Bileşen

Bileşen

Page 16: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Bileşenler Arasındaki Etkileşim

Bileşen

BileşenBileşen

Bileşen

Bileşen

Page 17: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

Page 18: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Çö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: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Bileşenler Arasındaki Etkileşim Kaosu

Page 21: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Mediator

Page 22: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Örnek: Adres Bilgileri Yönetim Ekranı

AddressListView

AddressDetailView

Address ToolBar View

Page 25: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Presenterpublic interface Presenter {

public void handle(BusinessEvent event);

}

Page 27: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 28: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

}

@Overridepublic void handle(BusinessEvent event) {

...}

}

Page 29: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

}

@Overridepublic void handle(BusinessEvent event) {

...}

}

Page 30: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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

}

@Overridepublic void handle(BusinessEvent event) {

...}

}

Page 31: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 32: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 33: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 34: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 35: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 36: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Address Selected

Page 37: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 (Update Button Click)

Page 38: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 39: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 40: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 41: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

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 42: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Address Updated

Page 43: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

Soru & Cevap

Page 44: MVP, Observer ve Mediator Örüntüleri ile Yeniden ......Kenan Sevindik Kimdir? 1999 ODTÜ Bilgisayar Müh. mezunu 15 yılın üzerinde kurumsal uygulama geliştirme deneyimi var

İletişim

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