user interface process application block

Post on 14-Jan-2016

56 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

User interface process application block. Владимир Чалков CEO. За какво ще говорим. Потребителски интерфейс – проблеми и решения Приложение на User interface process AP Microsoft application blocks Демонстрация. Основни проблеми. - PowerPoint PPT Presentation

TRANSCRIPT

User interface User interface process application process application

blockblock

Владимир ЧалковВладимир ЧалковCEOCEO

За какво ще говоримЗа какво ще говорим

Потребителски интерфейс – Потребителски интерфейс – проблеми и решенияпроблеми и решения

Приложение на Приложение на User interface User interface process APprocess AP

Microsoft application blocksMicrosoft application blocks ДемонстрацияДемонстрация

Основни проблемиОсновни проблеми

Пълно отделяне на потребителския Пълно отделяне на потребителския интерфейс от логиката и навигациятаинтерфейс от логиката и навигацията

Запазване на състоянието между Запазване на състоянието между различни компоненти и процесиразлични компоненти и процеси

Използване на един и същи модел в Използване на един и същи модел в различни типове приложенияразлични типове приложения

Създаване на “Създаване на “reusable” reusable” компоненти компоненти за потребителски интерфейсза потребителски интерфейс

Типично поведение при Типично поведение при Event-driven Event-driven технологиитехнологии

(1/2)(1/2) Навигацията се дефинира в Навигацията се дефинира в

OnClick OnClick събитиясъбития Всяка форма знае към коя е Всяка форма знае към коя е

следващатаследващата Навигацията е пръсната из целия Навигацията е пръсната из целия

кодкод Запазването на състоянието е Запазването на състоянието е

пръснато из целия кодпръснато из целия код

Типично поведение при Типично поведение при Event-driven Event-driven

технологиитехнологии(2/2)(2/2)

OnClickOnClick

OnDoubleClickOnDoubleClick

Model-view-controllerModel-view-controller

ModelModel Управлява и обработва Управлява и обработва

данните в приложениетоданните в приложението ViewView

Управлява визуализациятаУправлява визуализацията ControllerController

Управлява Управлява взаимодействието на взаимодействието на потребителя с потребителя с приложениетоприложението

Application blocksApplication blocks Показват как архитектурно се Показват как архитектурно се

подхожда към някои типични проблемиподхожда към някои типични проблеми Разпространяват се заедно със Разпространяват се заедно със

изходния код и могат да се използват изходния код и могат да се използват като основакато основа

Някои блокове:Някои блокове: Data access application blockData access application block Offline application blockOffline application block Configuration management application blockConfiguration management application block User interface process application blockUser interface process application block

User interface process User interface process blockblock

ЦелиЦели:: ““Развързване” на потребителския Развързване” на потребителския

интерфейс и навигациятаинтерфейс и навигацията Управление на състояниетоУправление на състоянието между между

различните компоненти и процесиразличните компоненти и процеси Независим от платформата модел за Независим от платформата модел за

Windows, Web Windows, Web ии мобилни приложениямобилни приложения Компоненти, които могат да се Компоненти, които могат да се

използват между проектиизползват между проекти

Основни функции (1/2)Основни функции (1/2)

Реализация на Реализация на MVCMVC Поддръжка на Поддръжка на Windows Windows и и Web Web

приложенияприложения Възможност за прехвърляне на Възможност за прехвърляне на

сесията между различни сесията между различни приложенияприложения

Използване на един и същи код Използване на един и същи код между различните типове между различните типове приложенияприложения

Основни функции (2/2)Основни функции (2/2)

State persistence providersState persistence providers Трансфер на Трансфер на Web Web сесиисесии Layout Layout мениджъримениджъри

Основни терминиОсновни термини

Navigation graphNavigation graph NavigatorNavigator State persistence providerState persistence provider TaskTask ControllerController

Controller Controller класакласа

Отговаря за общия контрол на Отговаря за общия контрол на потребителския интерфейспотребителския интерфейс

Съдържа методи за навигация, Съдържа методи за навигация, които формите извикваткоито формите извикват

Осигурява връзката с бизнес Осигурява връзката с бизнес компонентитекомпонентите

Осигурява съхраняване на Осигурява съхраняване на състоянието използвайки избрания състоянието използвайки избрания подходподход

НавигаториНавигатори GraphNavigatorGraphNavigator

Предварително дефиниран граф от Предварително дефиниран граф от възможните интерфейстивъзможните интерфейсти

OpenNavigatorOpenNavigator Определяне на навигацията без Определяне на навигацията без

предварително дефиниранепредварително дефиниране UserControlsNavigatorUserControlsNavigator

Навигация в рамките на една формаНавигация в рамките на една форма WizardNavigatorWizardNavigator

Реализация на типичния Реализация на типичния “Wizard” “Wizard” интерфейсинтерфейс

Запазване на Запазване на състояниетосъстоянието

ПроблемиПроблеми Състоянието на един потребителски Състоянието на един потребителски

процес или задача трябва да може да процес или задача трябва да може да се съхранявасе съхранява

Състоянието трябва да може да се Състоянието трябва да може да се съхранява и в дългосрочни носителисъхранява и в дългосрочни носители

Трябва да има нотификация, когато Трябва да има нотификация, когато състоянието се е променилосъстоянието се е променило

Persistence providersPersistence providers

IsolatedStoragePersistenceIsolatedStoragePersistence SecureIsolatedStoragePersistencSecureIsolatedStoragePersistenc

ee SqlServerPersistStateSqlServerPersistState SecureSqlServerPersistStateSecureSqlServerPersistState SessionStatePersistenceSessionStatePersistence MemoryStatePersistenceMemoryStatePersistence

Избор на Избор на persistence persistence providerprovider

Общата картинаОбщата картина

Дотъп до данните

Бизнес логика

WebFormView

ASP.NET страници

WebFormView

ASP.NET страници

WebFormView

ASP.NET страници

WinFormView

Windows Form

Вашия controller class

ASP.NET страници

WebFormView

ControllerBase

Data

XML файл

ASP.NET странициPersistence Provider

Вашия controller class

ASP.NET страници

State

Ваше състояние

ASP.NET странициUIP Manager

ASP.NET странициКонфигурация

ASP.NET странициView Manager

A user interface processA user interface process

frmListfrmList

frmMainfrmMain

frmPersonfrmPerson

start

end

previous

next

Начин на използване Начин на използване (1/2)(1/2)

Дефинират се всички процеси на Дефинират се всички процеси на потребителския интерфейспотребителския интерфейс

Дефинират се формите, които ще Дефинират се формите, които ще се показватсе показват

Променя се класа, който формите Променя се класа, който формите наследяватнаследяват

Начин на използване Начин на използване (2/2)(2/2)

Създава се Създава се Controller Controller класклас Избира се подходящия навигаторИзбира се подходящия навигатор Създава се конфигурационен Създава се конфигурационен

файл, който описва процеситефайл, който описва процесите

Промени по формитеПромени по формите

public class frmPerson : WindowsFormViewpublic class frmPerson : WindowsFormView{{

……..

private void frmPerson_Load(object sender, private void frmPerson_Load(object sender, EventArgs e)EventArgs e)

{{

this.txtFirst.Text = this.txtFirst.Text = TypeSafeController.CurrentPerson.Firstname;TypeSafeController.CurrentPerson.Firstname;

this.txtLast.Text = this.txtLast.Text = TypeSafeController.CurrentPerson.Lastname;TypeSafeController.CurrentPerson.Lastname;

Controller Controller класа (1/2)класа (1/2)public class MyController : ControllerBasepublic class MyController : ControllerBase{{

public ArrayList PersonList;public ArrayList PersonList;public Person CurrentPersonpublic Person CurrentPerson{{

getget{{

return return (Person)this.Navigator.CurrentState["CurrentPerson"];(Person)this.Navigator.CurrentState["CurrentPerson"];

}}setset{{

this.Navigator.CurrentState["CurrentPerson"]=value;this.Navigator.CurrentState["CurrentPerson"]=value;}}

}}

Controller Controller класа (2/2)класа (2/2)

public void frmListNewButton()public void frmListNewButton(){{

State.NavigateValue = "next";State.NavigateValue = "next";Navigate();Navigate();

}}

public void frmPersonEndButton()public void frmPersonEndButton(){{

State.NavigateValue = "previous";State.NavigateValue = "previous";Navigate();Navigate();

}}

Конфигурационен файл Конфигурационен файл (1/3)(1/3)

<navigationGraph name="MainNavigation" startView=“<navigationGraph name="MainNavigation" startView=“frmMainfrmMain" " state="State" statePersist="IsolatedStoragePersistence"state="State" statePersist="IsolatedStoragePersistence"iViewManager="WindowsFormViewManager">iViewManager="WindowsFormViewManager"><node view='frmList'><node view='frmList'><navigateTo navigateValue="next" view='frmPerson' /><navigateTo navigateValue="next" view='frmPerson' /><navigateTo navigateValue="end" view=<navigateTo navigateValue="end" view=‘frmMain‘frmMain' />' /></node></node><node view='frmPerson'><node view='frmPerson'><navigateTo navigateValue="previous“ view='frmList' /><navigateTo navigateValue="previous“ view='frmList' /></node></node><node view='Form1'><node view='Form1'><navigateTo navigateValue="Start" view='frmList' /><navigateTo navigateValue="Start" view='frmList' /></node></node>

</navigationGraph></navigationGraph>

Конфигурационен файл Конфигурационен файл (2/3)(2/3)

<<objectTypesobjectTypes>><<iViewManageriViewManager name="WindowsFormViewManager" name="WindowsFormViewManager"

type="Microsoft.ApplicationBlocks.UIProcess.WindowsFormViewMatype="Microsoft.ApplicationBlocks.UIProcess.WindowsFormViewManager, Microsoft.ApplicationBlocks.UIProcess, nager, Microsoft.ApplicationBlocks.UIProcess,

Version=1.0.1.0,Culture=neutral,PublicKeyToken=null" Version=1.0.1.0,Culture=neutral,PublicKeyToken=null" />/><<statestate name="State" name="State"

type="Microsoft.ApplicationBlocks.UIProcess.State, type="Microsoft.ApplicationBlocks.UIProcess.State, Microsoft.ApplicationBlocks.UIProcess, Microsoft.ApplicationBlocks.UIProcess, Version=1.0.1.0,Culture=neutral,PublicKeyToken=null" />Version=1.0.1.0,Culture=neutral,PublicKeyToken=null" />

<<controllercontroller name="MyController" name="MyController" type="Crossroad.UIPAB.Common.MyController, type="Crossroad.UIPAB.Common.MyController, Crossroad.UIPAB.Common, Crossroad.UIPAB.Common, Version=1.0.1.5,Culture=neutral,PublicKeyToken=null" />Version=1.0.1.5,Culture=neutral,PublicKeyToken=null" />

<<statePersistenceProviderstatePersistenceProvider name="IsolatedStoragePersistence" name="IsolatedStoragePersistence"

type="Microsoft.ApplicationBlocks.UIProcess.IsolatedStoragePetype="Microsoft.ApplicationBlocks.UIProcess.IsolatedStoragePersistence, rsistence, Microsoft.ApplicationBlocks.UIProcess, Microsoft.ApplicationBlocks.UIProcess, Version=1.0.1.0,Culture=neutral,PublicKeyToken=null" />Version=1.0.1.0,Culture=neutral,PublicKeyToken=null" />

</</objectTypesobjectTypes>>

Конфигурационен файл Конфигурационен файл (3/3)(3/3)

<<viewsviews>><<viewview name="frmPerson" type="Crossroad.UIPAB.UI.frmPerson, name="frmPerson" type="Crossroad.UIPAB.UI.frmPerson, Crossroad.UIPAB.UI, Crossroad.UIPAB.UI, Version=1.0.1.5,Culture=neutral,PublicKeyToken=null"Version=1.0.1.5,Culture=neutral,PublicKeyToken=null"

controller="MyController" stayOpen="false" controller="MyController" stayOpen="false" openModal="true" />openModal="true" /><<viewview name="frmList" type="Crossroad.UIPAB.UI.frmList, name="frmList" type="Crossroad.UIPAB.UI.frmList, Crossroad.UIPAB.UI, Crossroad.UIPAB.UI, Version=1.0.1.5,Culture=neutral,PublicKeyToken=null"Version=1.0.1.5,Culture=neutral,PublicKeyToken=null"

controller="MyController" stayOpen="false" controller="MyController" stayOpen="false" openModal="false" />openModal="false" /><<viewview name="frmMain" type="Crossroad.UIPAB.UI.frmMain, name="frmMain" type="Crossroad.UIPAB.UI.frmMain, Crossroad.UIPAB.UI, Crossroad.UIPAB.UI, Version=1.0.1.5,Culture=neutral,PublicKeyToken=null"Version=1.0.1.5,Culture=neutral,PublicKeyToken=null"

controller="MyController" stayOpen="false" controller="MyController" stayOpen="false" openModal="false" />openModal="false" />

</</viewsviews>>

Стартиране на процесаСтартиране на процеса

{{

UIPManager.NavigateEvent+=newMicrosoft.ApplicationUIPManager.NavigateEvent+=newMicrosoft.ApplicationBlBlocks.UIProcess.UIPManager.NavigateEventHandler(UIPocks.UIProcess.UIPManager.NavigateEventHandler(UIPMM anager_NavigateEvent);anager_NavigateEvent);

UIPManager.RegisterShutdown(this);UIPManager.RegisterShutdown(this);

UIPManager.StartNavigationTask("MainNavigation");UIPManager.StartNavigationTask("MainNavigation");this.Hide();this.Hide();

Навигация във Навигация във формитеформите

private void PersonsList_DoubleClick(object private void PersonsList_DoubleClick(object sender, System.EventArgs e)sender, System.EventArgs e)

{{

if (PersonsList.SelectedIndices.Count>0)if (PersonsList.SelectedIndices.Count>0)

{{

TypeSafeController.CurrentPerson=(Person)TyTypeSafeController.CurrentPerson=(Person)TypeSafeController.PersonList[PersonsList.SpeSafeController.PersonList[PersonsList.SelectedIndices[0]];electedIndices[0]];

TypeSafeController.frmListEdit();TypeSafeController.frmListEdit();

}}

}}

ДемонстрацияДемонстрация

Други възможностиДруги възможности

ILayoutManagerILayoutManager Възможност за т.н. Възможност за т.н. Layout ManagerLayout Manager

Кодиране на състояниетоКодиране на състоянието

ОбобщениеОбобщение

Реализира Реализира MVC MVC шаблонашаблона Позволява отделяне на навигацията Позволява отделяне на навигацията

и данните от потребителския и данните от потребителския интерфейсинтерфейс

Предоставя стандартен подход за Предоставя стандартен подход за съхраняване на състояниетосъхраняване на състоянието

Архитектурен подход, който трябва Архитектурен подход, който трябва да се прецени кога е подходящда се прецени кога е подходящ

ВръзкиВръзки

http://www.microsoft.com/patternshttp://www.microsoft.com/patterns http://msdn.microsoft.comhttp://msdn.microsoft.com http://www.gotdotnet.comhttp://www.gotdotnet.com News://News://

microsoft.public.bg.developermicrosoft.public.bg.developer Сървър: Сървър: news.micrsoft.comnews.micrsoft.com

Q & AQ & A

top related