nianio pattern błażej chodarcewicz warsaw, 2006-02-22

Post on 26-Mar-2015

215 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

NIANIO Pattern

Błażej ChodarcewiczWarsaw, 2006-02-22

Presentation Plan• Current UI problems• The Nianio introduction• Test application• Java patterns• Genrap UI future

Current prblems• Incomplete application state• A lot of state full objects• Synchronization and threads• Models, MM, listeners – loops• Un clear event flow

The NIANIO• State type

definition• Command type

definition• External command

type definition• Function – nianio

implementation – logic

Test application – Nianio in practice

Java implementation of Nianio• State - schema structure• Command - schema

variant• External command -

schema variant

• State = { … }• Cmd = variant [java

mm] { … }• ExtCmd = variant [java

mm] {…}Nianio = public State invoke(State, Cmd, ExtCmd.MM)• Function• No side efects• ExtCmd.MM accumulates commands

AppState = {reportFile, xmlFile, xsdFile, outputFile : SelectFileState = {

fileName : string? fileChooserState : FileChooserParams= {

kind : FileChooserKind = variant {open | save}extensions : array of stringdescription : string

}}outputKind : OutputKind = variant {html | pdf | xls}status : Status = variant { generatingReport of int | ready }messageDialogStates : MsgDialogs

}MsgDialogs = [java dict [key]] array of Entry = {

key : MsgDialogKey = stringvalue : MessageDialogParams = {

dialogKind : MessageDialogKind = variant {info | warning | error }

message : string}

}

AppLogicCmd = [java mm] variant {run | close| setPdfOutput | setHtmlOutput | setXlsOutput| generateRequest| reportGenerated of GenrapPluginEvent| reportFileCmd of SelectFileCmd| xmlFileCmd of SelectFileCmd| xsdFileCmd of SelectFileCmd| outputFileCmd of SelectFileCmd| messageDialogClosed of MsgDialogKey

}SelectFileCmd = [java mm] variant {

setFileName of string| selectFromFileChooser| fileSelected of FileChooserResult = {

? path : string}

}GenrapPluginEvent = [java mm] variant {

success of ReportParams| failure of ReportGenerationFailure = {

params : ReportParamscause : string

}}

AppLogicExtCmd = [java mm] variant {generate of ReportParams| showMainFrame of MainFrame = {

reportFileName, xmlFileName, xsdFileName,outputFileName : stringoutputKind : OutputKindstatus : string

}| setOutput of OutputKind| setStatus of string| reportFile of SelectFileExtCmd| xmlFile of SelectFileExtCmd| xsdFile of SelectFileExtCmd| outputFile of SelectFileExtCmd| showMessage of ShowMessageCmd = {

key : MsgDialogKeyparams : MessageDialogParams

}| closeMainFrame | exit

}SelectFileExtCmd = [java mm] variant {

openFileChooser of FileChooserParams| setFileName of string

}

More Nianio examples – Test Application Source

• Nianio implementation• Nianio invocation• Nianio parameterization• Connecting nianios

Genrap UI future• Nianio and functional code

everywhere (no models, listeners)• Small part of code which touch

threads, synchronization etc.• Controlled event flow• Clear core structure

Genrap core architecture

Thank you

Questions?

top related