540 likes | 680 Views
A Family of Languages for Architecture Description. DSM’08 @ OOPSLA 2008. Markus Voelter ( voelter@acm.org , www.voelter.de ). . Context. Architecture is often non tangible or technology specific. Architecture DSL. As you understand a nd develop your Architecture ….
E N D
A Family of Languages for Architecture Description DSM’08 @ OOPSLA 2008 Markus Voelter(voelter@acm.org, www.voelter.de)
Context
Architecture DSL
As you understand anddevelopyour Architecture…
Textual Syntax: We know how this works from our experience with code.
Textual Syntax: We know how this works from our experience with code. Editors areeasy to build.
Textual Syntax: We know how this works from our experience with code. Editors areeasy to build. Integrates well with existing Version Control Systems etc.
componentDelayCalculator { providesIDelayCalculator requiresIInfoScreen } componentInfoScreen { providesIInfoScreen } componentAircraftModule { providesIAircraftModule requiresIDelayCalculator } interfaceIDelayCalculator {} interfaceIInfoScreen {} interfaceIAircraftModule {}
componentDelayCalculator { requires screens[0..n]: IInfoScreen … } componentInfoScreen { provides default: IInfoScreen } instance dc: DelayCalculator instance screen1: InfoScreen instance screen2: InfoScreen connectdc.screens to (screen1.default, screen2.default)
interfaceIAircraftStatus { onewaymessagereportPosition (aircraft: ID, pos: Position ) request-reply message reportProblem { request (aircraft: ID, problem: Problem, comment: String) reply (repairProcedure: ID) } }
structFlightInfo { from: Airport to: Airport scheduled: Time expected: Time … } replicatedsingleton flights { flights: FlightInfo[] } componentDelayCalculator { publishes flights } componentInfoScreen { consumes flights }
interfaceIAircraftStatus { onewaymessageregisterAircraft(aircraft: ID! ) onewaymessageunregisterAircraft(aircraft: ID! ) onewaymessagereportPosition(aircraft: ID!, pos: Position! ) request-replymessagereportProblem { request (aircraft: ID!, problem: Problem!, comment: String!) reply (repairProcedure: !ID) } protocolinitial = new { state new { registerAircraft => registered } state registered { unregisterAircraft => new reportPosition reportProblem } } }
When a graphical notation isbetter, youcanvisualize.
Via M2M Read-Only Auto-Layout Drill-Down
Textual DSLs vs. Graphical vs. Visualization
I‘vedone real project workthisway!
Challenge
New language foreach system?
Common Base?
Reusable Language Modules?
Solution Approach
Identify common, reusable architectural abstractions(Experience, Patterns)
Use PLE to configurecustom DSL
ComponentsHierarchical, Stateless/ful, Persistent, Threadsafe, Parameters, RuntimeInstantiation, Active
Interfaces RPC, Messaging,Async, Pub/Sub, Exceptions, Data Types, DBC, Protocol State Machines
Ports • Uni/Bidirectional, Caridinalities, Optional/Required
Connectors • Static, Dynamic, Lookup, • Failover, Backup, Multi
Data Replication • Realtime, On Demand, 1..1, 1..n
Solution Tooling
Variability is expressed as a feature model in pure::variants
Results in a DSL incl. fancy editor (code completion, constraint checks, outline, folding, cross-file nav)
Customization: Add you own specific Language elements (beyond what the configuration supports)
Tool Implementation