SlideShare a Scribd company logo
iPhonicalSoftware Development
and Model-Driven


Heiko Behrens (itemis)




backchannel via #iphonical #iphonedevcon09
/ soft·ware de·vel·op·ment / n.
the set of activities that results in
software products. ~ may include
research, new development,
modification, reuse, maintenance,
or any other activities that result in
software products.
Sketching some

      Typical Situations
              in
    Software Development

                 #iphonical #iphonedevcon09
Boring code
Accidental complexity
Wrong level of abstraction
Anatomy of Modern Software




         Software artifact
Anatomy of Modern Software




    manually written code      Frameworks




                   Libraries
Anatomy of Modern Software


                    manually written
                        code

                                       Frameworks

  schematic code (manually written)



                       Libraries
(rote) coding doesn’t cut it!
Our Problems




Can we solve them with code generation?
Yes, we can!
Talking about

    Common Approaches
             to
     Advoid Redundancy

                #iphonical #iphonedevcon09
Wizards
Wizards in Practice



Ruby on Rails      AppLoop


     Xcode Project Templates
This wizard whips up a
complete and running
legacy application with
just a single click.
Designers
Designers in Practice


              Graphical
              Designers


  Interface               Core
  Builder                 Data
Interface Builder
is no abstraction
 but another approach
  to object construction.
   Handwritten code is
   still needed.
Core Data
 produces code a
  developer can work
   with but overwrites
 handcrafted value.
Introducing

       Model-Driven
   Software Development
                              #mdsd
              #iphonical #iphonedevcon09
Raise the level
of abstraction
where possible
and generate
 code wisely.
One cannot
  abstract away
   everything.
 Manual code is
 great for all the
special cases and
     details.
Use the best of both worlds at the same time.
Isn’t
        Core Data
                           #mdsd?
             #iphonical #iphonedevcon09
Models Data Schema
Sophisticated Runtime
Demo
So, what’s
             # iPhonical
                                about?
                           #iphonedevcon09
View DSL                     View / GUI              NIB



 Entity DSL

                            ViewController       ViewController
Remote DSL



Service DSL
                                                 Transfomer
                            ServiceFacades
                                                   Mapper




ORM / DAO                                                         RemoteClient
                 Entities                  Messages




  Sqlite                                     JSON                    HTTP




                 Any
                                                        ServerFacade
              RestService


                                                Server                Server
                                                Entities             Messages


                                                       JBoss / RestEasy
Thoughts of an iPhone developer
View DSL                     View / GUI              NIB



 Entity DSL
                                 Better
                                Manually
                            ViewController       ViewController
Remote DSL



Service DSL

                            What’s this?
                                                 Transfomer
                            ServiceFacades
                                                   Mapper




  Core Data
ORM / DAO
                 Entities
                                             Framework
                                           Messages
                                                                  RemoteClient




  Sqlite                                     JSON                    HTTP




                 Any
                                                        ServerFacade
              RestService

                                               Most likely
                                                Server
                                                Entities
                                                                      Server
                                                                     Messages

                                                legacy JBoss / RestEasy
Will now present
      Objective Resource
                 or
       “iPhone on Rails”
           #iphonical #iphonedevcon09
Demo
Entities with Objective Resource
#import "ObjectiveResource.h"                                  #import "ObjectiveResource.h"
#import "Dog.h"                                                #import "Person.h"

@interface Person : NSObject {                                 @implementation Person
! NSString *personId;                                          @synthesize personId;
! NSDate *updatedAt;                                           @synthesize updatedAt;
! NSDate *createdAt;                                           @synthesize createdAt;
! NSString *name;                                              @synthesize name;
}
                                                               // handle pluralization
@property   (nonatomic,   retain)   NSString *personId;        + (NSString *) getRemoteCollectionName {
@property   (nonatomic,   retain)   NSDate *updatedAt;         ! return @"people";
@property   (nonatomic,   retain)   NSDate *createdAt;         }
@property   (nonatomic,   retain)   NSString *name;
                                                               - (NSArray *) findAllDogs {
// returns dogs                                                ! return [Dog findRemote:[NSString stringWithFormat:
- (NSArray *) findAllDogs;                                            @"%@/dogs", personId, nil]];
- (NSArray *) findAllDogsWithResponse: (NSError * *) aError;   }

@end                                                           - (NSArray *) findAllDogsWithResponse: (NSError * *) aError {
                                                               ! return [Dog findRemote:[NSString stringWithFormat:
                                                                      @"%@/dogs", personId, nil] withResponse: aError];
                                                               }

                                                               - (void) dealloc {
                                                               ! [personId release];
                                                               ! [updatedAt release];
                                                               ! [createdAt release];
                                                               ! [name release];
                                                               ! [super dealloc];
                                                               }

                                                               @end
Real Information Content
#import "ObjectiveResource.h"                                  #import "ObjectiveResource.h"
#import "Dog.h"                                                #import "Person.h"

@interface Person : NSObject {                                 @implementation Person
! NSString *personId;                                          @synthesize personId;
! NSDate *updatedAt;                                           @synthesize updatedAt;
! NSDate *createdAt;                                           @synthesize createdAt;
! NSString *name;                                              @synthesize name;
}
                                                               // handle pluralization
@property   (nonatomic,   retain)   NSString *personId;        + (NSString *) getRemoteCollectionName {
@property   (nonatomic,   retain)   NSDate *updatedAt;         ! return @"people";
@property   (nonatomic,   retain)   NSDate *createdAt;         }
@property   (nonatomic,   retain)   NSString *name;
                                                               - (NSArray *) findAllDogs {
// returns dogs                                                ! return [Dog findRemote:[NSString stringWithFormat:
- (NSArray *) findAllDogs;                                            @"%@/dogs", personId, nil]];
- (NSArray *) findAllDogsWithResponse: (NSError * *) aError;   }

@end                                                           - (NSArray *) findAllDogsWithResponse: (NSError * *) aError {
                                                               ! return [Dog findRemote:[NSString stringWithFormat:
                                                                      @"%@/dogs", personId, nil] withResponse: aError];
                                                               }

                                                               - (void) dealloc {
                                                               ! [personId release];
                                                               ! [updatedAt release];
                                                               ! [createdAt release];
                                                               ! [name release];
                                                               ! [super dealloc];
                                                               }

                                                               @end
Objective-C #ftl ?
       #iphonical #iphonedevcon09
Objective-C
Suppose...
You’d want to core an apple...
... for your kids.
?
Right tool for the job
Your trusty swiss army knife!
Suppose...
You’d want to core a few more apples...
... for an apple cake.
Still the best tool for the job?
Better use this one
...and this one
... a DSL is ...
A specific tool
for a specific job
A specific tool
for a specific job
Idea behind #iphonical :

Use DSLs to describe the world

                          #iphonedevcon09
!   !   entity Car {
!   !   ! ! ! ! String name;
!   !   ! ! ! ! String number;
!   !   ! ! ! ! Integer km;
!   !   ! ! ! ! JourneyEntry * journeys;
!   !   };
!   !
!
!
!
    !
    !
    !
        entity JourneyEntry {
        ! ! ! ! Location startLocation;
                                                          Entities
!   !   ! ! ! ! Location endLocation;
!   !   ! ! ! ! String comment;
!   !   ! ! ! ! Integer startKm;
!   !   ! ! ! ! Integer endKm;
!   !   ! ! ! ! Car car;
!   !   ! ! ! ! Driver driver;
!   !   ! ! ! ! Reason reason;
!   !   };


!   !   entity CarDataResponse {
!   !   ! ! ! ! String creationDate;
!
!
!
    !
    !
    !
        ! ! ! ! Car car;
        ! ! ! ! Location location;
        ! ! ! ! JourneyEntry journey;
                                             Services / Messages
!   !   ! ! ! ! Driver driver;
!   !   };

!   !   restService iDriveLogService "/idrivelogservice" {
!   !   ! ! ! ! baseUrl "http://localhost:8080/iDriveLogRESTWebServices";
!   !   ! ! ! ! get data "/data" response:CarDataResponse;
!   !   };




!   !   viewController Root {


                                                               UI
!   !   ! ! ! ! ui Label myLabel;
!   !   ! ! ! ! ui Textfield myTextfield;
!   !   ! ! ! ! action myAction;
!   !   };
Leverage Entity DSL
        for
Objective Resource
View / GUI



Entity DSL

                ViewController




             Objective Resource


                 Entities and
                  Mapping




                 JSON / HTTP




                    Rails
                  Application
Demo
Wait...

  #iPhonical works
 with any framework
                     ?
               #iphonedevcon09
Demo of custom templates
#iPhonical: Where to get
        and its future
              #iphonedevcon09
Open source Apache License 2.0


                        code
       code.google.com/p/iphonical/



          Currently 8 participants
What’s comming up?

! Publications in upcoming
  Eclipse Magazin
! ShowCase about Conferences
! Tighter integration with Xcode
twitter @HBehrens
blog http://HeikoBehrens.net

mail       Heiko.Behrens@itemis.de
xing       http://www.xing.com/profile/Heiko_Behrens
linkedin   http://www.linkedin.com/in/HeikoBehrens




                                                      code.google.com/p/iphonical

More Related Content

PDF
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
PPT
Jet presentation
PDF
Visage Android Hands-on Lab (OSCON)
PPTX
XML-Free Programming
PDF
Jwis2011 ruo ando
PDF
Annotations in PHP: They Exist
PDF
Ionic으로 모바일앱 만들기 #3
PPTX
VisualWeb - Building a NodeJS Server Meshwork and Full-Javascript Stack Frame...
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Jet presentation
Visage Android Hands-on Lab (OSCON)
XML-Free Programming
Jwis2011 ruo ando
Annotations in PHP: They Exist
Ionic으로 모바일앱 만들기 #3
VisualWeb - Building a NodeJS Server Meshwork and Full-Javascript Stack Frame...

What's hot (19)

PDF
From YUI3 to K2
PDF
Building Fast, Modern Web Applications with Node.js and CoffeeScript
PDF
Phing i Fabric - Budowanie i deployment aplikacji webowych
PDF
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
PDF
Ajax Security
PDF
Create a res tful services api in php.
ODP
TangoWithDjango - ch8
PDF
FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
PDF
Why Node.js
PDF
Real World Dependency Injection - PFCongres 2010
PDF
Rails vs Web2py
PDF
Introduction To Web Beans
PDF
Laravel dokumentacja Restful API - swagger
PDF
A Practitioner’s guide to Hardened JavaScript
PDF
Devoxx France 2013 Cloud Best Practices
PDF
web2py:Web development like a boss
PPT
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
PDF
Standford 2015 week5: 1.View Controller Lifecycle, Autolayout 2. Scroll View ...
PDF
IOC + Javascript
From YUI3 to K2
Building Fast, Modern Web Applications with Node.js and CoffeeScript
Phing i Fabric - Budowanie i deployment aplikacji webowych
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
Ajax Security
Create a res tful services api in php.
TangoWithDjango - ch8
FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Why Node.js
Real World Dependency Injection - PFCongres 2010
Rails vs Web2py
Introduction To Web Beans
Laravel dokumentacja Restful API - swagger
A Practitioner’s guide to Hardened JavaScript
Devoxx France 2013 Cloud Best Practices
web2py:Web development like a boss
ZFConf 2012: Dependency Management в PHP и Zend Framework 2 (Кирилл Чебунин)
Standford 2015 week5: 1.View Controller Lifecycle, Autolayout 2. Scroll View ...
IOC + Javascript
Ad

Viewers also liked (20)

PDF
Model-Driven Software Development 2.0
PDF
Service Cloud für Fortgeschrittene – Die Roadmap für 2012
PPTX
Datameer
PDF
Israel redefining innovation at International CES 2015
PPTX
Windows Azure Mobile Services
PDF
Model Driven Software Development - Data Model Evolution
PDF
IN4308 1
PDF
Getting Started with Big Data for Business Managers
PPTX
Agile MDD
PPTX
APEX 5.0, und sonst?
PDF
Schatten IT erfolgreich bekämpfen
PDF
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXT
PDF
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
PDF
Analyzing Unstructured Data in Hadoop Webinar
PDF
CG2010 Introducing MDSD
PDF
Paydirekt - Ein kurzer Walkthrough
PPTX
Software is eating the world and MDD should be in the driving seat
PDF
Why there is no future for Model Driven Development
PDF
Payment und Fintech in Deutschland. Versuch einer Übersicht
PDF
Making Big Data Easy for Everyone
Model-Driven Software Development 2.0
Service Cloud für Fortgeschrittene – Die Roadmap für 2012
Datameer
Israel redefining innovation at International CES 2015
Windows Azure Mobile Services
Model Driven Software Development - Data Model Evolution
IN4308 1
Getting Started with Big Data for Business Managers
Agile MDD
APEX 5.0, und sonst?
Schatten IT erfolgreich bekämpfen
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXT
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
Analyzing Unstructured Data in Hadoop Webinar
CG2010 Introducing MDSD
Paydirekt - Ein kurzer Walkthrough
Software is eating the world and MDD should be in the driving seat
Why there is no future for Model Driven Development
Payment und Fintech in Deutschland. Versuch einer Übersicht
Making Big Data Easy for Everyone
Ad

Similar to iPhonical and model-driven software development for the iPhone (20)

KEY
iPhone Development Intro
PDF
FI MUNI 2012 - iOS Basics
PPT
internet
PDF
200910 - iPhone at OOPSLA
PDF
Write native iPhone applications using Eclipse CDT
PDF
MFF UK - Introduction to iOS
PDF
Cross-Platform Data Access for Android and iPhone
PDF
Elements for an iOS Backend
PDF
Building Flexible APIs for Web 2.x/Cloud Applications (JavaOne 2011 Session ...
ZIP
iPhone and Rails integration
PDF
Native Phone Development 101
PDF
201010 SPLASH Tutorial
KEY
Introduction to Restkit
PDF
Data access layer and schema definitions
PDF
Overcoming The Impedance Mismatch Between Source Code And Architecture
PDF
iPhone Programming in 30 minutes (?) [FTS]
PDF
iOS Development - Offline Class for Jasakomer
PDF
mekentosj.com - building Papers
PDF
Building Papers
PDF
Iphone course 2
iPhone Development Intro
FI MUNI 2012 - iOS Basics
internet
200910 - iPhone at OOPSLA
Write native iPhone applications using Eclipse CDT
MFF UK - Introduction to iOS
Cross-Platform Data Access for Android and iPhone
Elements for an iOS Backend
Building Flexible APIs for Web 2.x/Cloud Applications (JavaOne 2011 Session ...
iPhone and Rails integration
Native Phone Development 101
201010 SPLASH Tutorial
Introduction to Restkit
Data access layer and schema definitions
Overcoming The Impedance Mismatch Between Source Code And Architecture
iPhone Programming in 30 minutes (?) [FTS]
iOS Development - Offline Class for Jasakomer
mekentosj.com - building Papers
Building Papers
Iphone course 2

More from Heiko Behrens (9)

PDF
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
PDF
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
PDF
MDSD for iPhone and Android
PDF
MDSD on iPhone - EclipseCon 2010
PDF
Building DSLs with Xtext - Eclipse Modeling Day 2009
PDF
Xtext Webinar
PDF
Xtext at Eclipse DemoCamp London in June 2009
PDF
Mastering Differentiated MDSD Requirements at Deutsche Boerse AG
PDF
Xtext - und was man damit anstellen kann
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
EclipseCon2011 Cross-Platform Mobile Development with Eclipse
MDSD for iPhone and Android
MDSD on iPhone - EclipseCon 2010
Building DSLs with Xtext - Eclipse Modeling Day 2009
Xtext Webinar
Xtext at Eclipse DemoCamp London in June 2009
Mastering Differentiated MDSD Requirements at Deutsche Boerse AG
Xtext - und was man damit anstellen kann

Recently uploaded (20)

PPTX
Cloud computing and distributed systems.
PDF
Machine learning based COVID-19 study performance prediction
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
KodekX | Application Modernization Development
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation_ Review paper, used for researhc scholars
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPT
Teaching material agriculture food technology
PDF
Encapsulation theory and applications.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
Cloud computing and distributed systems.
Machine learning based COVID-19 study performance prediction
NewMind AI Weekly Chronicles - August'25 Week I
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Per capita expenditure prediction using model stacking based on satellite ima...
KodekX | Application Modernization Development
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation_ Review paper, used for researhc scholars
The AUB Centre for AI in Media Proposal.docx
MYSQL Presentation for SQL database connectivity
Reach Out and Touch Someone: Haptics and Empathic Computing
Building Integrated photovoltaic BIPV_UPV.pdf
Teaching material agriculture food technology
Encapsulation theory and applications.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Digital-Transformation-Roadmap-for-Companies.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Understanding_Digital_Forensics_Presentation.pptx

iPhonical and model-driven software development for the iPhone

  • 1. iPhonicalSoftware Development and Model-Driven Heiko Behrens (itemis) backchannel via #iphonical #iphonedevcon09
  • 2. / soft·ware de·vel·op·ment / n. the set of activities that results in software products. ~ may include research, new development, modification, reuse, maintenance, or any other activities that result in software products.
  • 3. Sketching some Typical Situations in Software Development #iphonical #iphonedevcon09
  • 6. Wrong level of abstraction
  • 7. Anatomy of Modern Software Software artifact
  • 8. Anatomy of Modern Software manually written code Frameworks Libraries
  • 9. Anatomy of Modern Software manually written code Frameworks schematic code (manually written) Libraries
  • 11. Our Problems Can we solve them with code generation?
  • 13. Talking about Common Approaches to Advoid Redundancy #iphonical #iphonedevcon09
  • 15. Wizards in Practice Ruby on Rails AppLoop Xcode Project Templates
  • 16. This wizard whips up a complete and running legacy application with just a single click.
  • 18. Designers in Practice Graphical Designers Interface Core Builder Data
  • 19. Interface Builder is no abstraction but another approach to object construction. Handwritten code is still needed.
  • 20. Core Data produces code a developer can work with but overwrites handcrafted value.
  • 21. Introducing Model-Driven Software Development #mdsd #iphonical #iphonedevcon09
  • 22. Raise the level of abstraction where possible and generate code wisely.
  • 23. One cannot abstract away everything. Manual code is great for all the special cases and details.
  • 24. Use the best of both worlds at the same time.
  • 25. Isn’t Core Data #mdsd? #iphonical #iphonedevcon09
  • 28. Demo
  • 29. So, what’s # iPhonical about? #iphonedevcon09
  • 30. View DSL View / GUI NIB Entity DSL ViewController ViewController Remote DSL Service DSL Transfomer ServiceFacades Mapper ORM / DAO RemoteClient Entities Messages Sqlite JSON HTTP Any ServerFacade RestService Server Server Entities Messages JBoss / RestEasy
  • 31. Thoughts of an iPhone developer
  • 32. View DSL View / GUI NIB Entity DSL Better Manually ViewController ViewController Remote DSL Service DSL What’s this? Transfomer ServiceFacades Mapper Core Data ORM / DAO Entities Framework Messages RemoteClient Sqlite JSON HTTP Any ServerFacade RestService Most likely Server Entities Server Messages legacy JBoss / RestEasy
  • 33. Will now present Objective Resource or “iPhone on Rails” #iphonical #iphonedevcon09
  • 34. Demo
  • 35. Entities with Objective Resource #import "ObjectiveResource.h" #import "ObjectiveResource.h" #import "Dog.h" #import "Person.h" @interface Person : NSObject { @implementation Person ! NSString *personId; @synthesize personId; ! NSDate *updatedAt; @synthesize updatedAt; ! NSDate *createdAt; @synthesize createdAt; ! NSString *name; @synthesize name; } // handle pluralization @property (nonatomic, retain) NSString *personId; + (NSString *) getRemoteCollectionName { @property (nonatomic, retain) NSDate *updatedAt; ! return @"people"; @property (nonatomic, retain) NSDate *createdAt; } @property (nonatomic, retain) NSString *name; - (NSArray *) findAllDogs { // returns dogs ! return [Dog findRemote:[NSString stringWithFormat: - (NSArray *) findAllDogs; @"%@/dogs", personId, nil]]; - (NSArray *) findAllDogsWithResponse: (NSError * *) aError; } @end - (NSArray *) findAllDogsWithResponse: (NSError * *) aError { ! return [Dog findRemote:[NSString stringWithFormat: @"%@/dogs", personId, nil] withResponse: aError]; } - (void) dealloc { ! [personId release]; ! [updatedAt release]; ! [createdAt release]; ! [name release]; ! [super dealloc]; } @end
  • 36. Real Information Content #import "ObjectiveResource.h" #import "ObjectiveResource.h" #import "Dog.h" #import "Person.h" @interface Person : NSObject { @implementation Person ! NSString *personId; @synthesize personId; ! NSDate *updatedAt; @synthesize updatedAt; ! NSDate *createdAt; @synthesize createdAt; ! NSString *name; @synthesize name; } // handle pluralization @property (nonatomic, retain) NSString *personId; + (NSString *) getRemoteCollectionName { @property (nonatomic, retain) NSDate *updatedAt; ! return @"people"; @property (nonatomic, retain) NSDate *createdAt; } @property (nonatomic, retain) NSString *name; - (NSArray *) findAllDogs { // returns dogs ! return [Dog findRemote:[NSString stringWithFormat: - (NSArray *) findAllDogs; @"%@/dogs", personId, nil]]; - (NSArray *) findAllDogsWithResponse: (NSError * *) aError; } @end - (NSArray *) findAllDogsWithResponse: (NSError * *) aError { ! return [Dog findRemote:[NSString stringWithFormat: @"%@/dogs", personId, nil] withResponse: aError]; } - (void) dealloc { ! [personId release]; ! [updatedAt release]; ! [createdAt release]; ! [name release]; ! [super dealloc]; } @end
  • 37. Objective-C #ftl ? #iphonical #iphonedevcon09
  • 40. You’d want to core an apple...
  • 41. ... for your kids.
  • 42. ? Right tool for the job
  • 43. Your trusty swiss army knife!
  • 45. You’d want to core a few more apples...
  • 46. ... for an apple cake.
  • 47. Still the best tool for the job?
  • 50. ... a DSL is ...
  • 51. A specific tool for a specific job
  • 52. A specific tool for a specific job
  • 53. Idea behind #iphonical : Use DSLs to describe the world #iphonedevcon09
  • 54. ! ! entity Car { ! ! ! ! ! ! String name; ! ! ! ! ! ! String number; ! ! ! ! ! ! Integer km; ! ! ! ! ! ! JourneyEntry * journeys; ! ! }; ! ! ! ! ! ! ! ! entity JourneyEntry { ! ! ! ! Location startLocation; Entities ! ! ! ! ! ! Location endLocation; ! ! ! ! ! ! String comment; ! ! ! ! ! ! Integer startKm; ! ! ! ! ! ! Integer endKm; ! ! ! ! ! ! Car car; ! ! ! ! ! ! Driver driver; ! ! ! ! ! ! Reason reason; ! ! }; ! ! entity CarDataResponse { ! ! ! ! ! ! String creationDate; ! ! ! ! ! ! ! ! ! ! Car car; ! ! ! ! Location location; ! ! ! ! JourneyEntry journey; Services / Messages ! ! ! ! ! ! Driver driver; ! ! }; ! ! restService iDriveLogService "/idrivelogservice" { ! ! ! ! ! ! baseUrl "http://localhost:8080/iDriveLogRESTWebServices"; ! ! ! ! ! ! get data "/data" response:CarDataResponse; ! ! }; ! ! viewController Root { UI ! ! ! ! ! ! ui Label myLabel; ! ! ! ! ! ! ui Textfield myTextfield; ! ! ! ! ! ! action myAction; ! ! };
  • 55. Leverage Entity DSL for Objective Resource
  • 56. View / GUI Entity DSL ViewController Objective Resource Entities and Mapping JSON / HTTP Rails Application
  • 57. Demo
  • 58. Wait... #iPhonical works with any framework ? #iphonedevcon09
  • 59. Demo of custom templates
  • 60. #iPhonical: Where to get and its future #iphonedevcon09
  • 61. Open source Apache License 2.0 code code.google.com/p/iphonical/ Currently 8 participants
  • 62. What’s comming up? ! Publications in upcoming Eclipse Magazin ! ShowCase about Conferences ! Tighter integration with Xcode
  • 63. twitter @HBehrens blog http://HeikoBehrens.net mail Heiko.Behrens@itemis.de xing http://www.xing.com/profile/Heiko_Behrens linkedin http://www.linkedin.com/in/HeikoBehrens code.google.com/p/iphonical