Upload
alexander-evseenko
View
98
Download
2
Tags:
Embed Size (px)
Citation preview
ABSTRACT APPLICATION LANGUAGE
Mobile Cross-platform Development
AS-IS
Platform dependent Application Lifecycle
Development
Deployment
Support
AS-IS Development
Implement requirements for all target platform (Android, iOS, …[, supporting different version of SDKs
Using different languages, framework, design patterns, tools, …
AS-IS Deployment
Using different API/applications to deploy an application
Different graphical materials
AS-IS Support
Create fixes and updates for all supported platforms in the same period of time
Discrepancies between applications on different platforms are growing while the app lifecycle
AS-IS Solutions
Hybrid app Cross-platform frameworks
Generation Tools
Rho Qt No business-logic support
PhoneGap J2ME
TO-BE
Abstract Language to create applications in a Declarative way
Separation of L&F from business-logic
Componentization and Graphical Design
Open API for Components creation
Automate deployment to different app stores
Virtual App Repository to improve UX
Social networking
TO-BE Abstract Language
Business Rules Implementation Platform
Functionality
Abstract Declaration
Business Logic
Click Me
If A < B then…
L&F Fonts, Styles,
Layouts, …
TO-BE Abstract Language (cont)
main: GuiContainer
address: ListView
prv: ContentProvider
address: Entity
details: GuiContainer
street: EditText
city: EditTExt
country: EditText
TO-BE Graphical Design
UML-like Graphic representaion
Scala representation
val address = new GuiContainer {
val street = new EditText
val city = new EditText
val country = new EditText
}
address: GuiContainer
street: EditText
city: EditTExt
country: EditText
TO-BE Components Open API
Scala DSL
abstract class Widget(name: String) extends Component(name) {
def importDeclaration: String
def fieldDeclaration: String
def initialization: String
def initLoader: String
def layoutTag: String
def setValue(fromRef: String): String
def getValue: String
}
TO-BE Business Logic Mixing
CodeGen API allows inject target-specific code into the app module:
val doActivate = new Method("doActivate") {
this <~ Import("android.os.Bundle")
this <~ Import("android.content.Intent")
override def signature = s"""$name(int)"""
override def caller = s"""$name(${this("id")})"""
override def holder =
s"""
private void $name(long id) {
final Bundle bundle = new Bundle();
bundle.putLong("${this("idField")}", id);
final Intent intent = new Intent(this, MyActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
"""
}
App Repository
Collects samples, applications and code snippet to share between community members.
http://adaldev.com
Module Editor
Allows to create and develop an application using code editor window and snippets.
http://adaldev.com/builder
Target Project
Generates a target project for chosen platform, browses source code, download app binary.
http://adaldev.com/target
Questions