SlideShare a Scribd company logo
1 of 44
AD-1380: A Beard, An App, A Blender
Eric McCormick
Who?
Who is talking?
• Eric McCormick
• developer
• husband
• father
• veteran
• former EMT
• blogger
• …more than I have space for
edm00se.io
@edm00se
Who, continued
• Web Developer at
▪ a fourth-generation, family-owned professional
construction services firm, in operation since 1889
• my focus usually revolves around:
▪ document control
▪ productivity and performance metrics
▪ system integration
▪ process automation
Who's This Session For, and Why?
• Developers, who have a passion for
▪ application structure, standards, and maintenance
▪ documentation
▪ testing
▪ automation
• Non-Developers (development-adjacent roles)
▪ who want a developer's take on the above
What's the Session?
AD-1380: A Beard, An App, A Blender…
• …one developer’s take on building applications with
Domino/XPages
• should probably be …one developer’s take on expanding how
we can build applications with Domino/XPages
Session Abstract
Building applications with Domino/XPages opens a number of doors.
Choosing the right path is what becomes hard. This is a session on one
developer's take on the way we can structure our applications to get the
best of the Domino/XPages platform in addition to all the modern, front-
end tooling that the rest of the industry is using to great advantage. This
session will cover an approach to app dev via application segregation
mechanics, providing the data via HttpServlets to provide a RESTful
JSON API, and a UI-layer that automates the majority of concerns via a
JS MV* framework. Front-end tooling via Yeoman, Grunt, and Bower
(and/or others) can aid in our development and testing, back-end mocks
for making contracted work easier, and other techniques.
Ms. America Statement
1. A harmonious development environment for myself and any
development staff at my company
2. A unified theory practice of development, for consistent cross-
platform and cross-app development behavior
3. Making all application logic and data consistently accessible
across separate, but organic, systems
4. Making contracted development work more easily performed
5. Automating everything I can
Alternative Session Title
Eric McCormick
and the Quest to Develop
Amazing Applications
My Personal Goals (a.k.a.- my ‘quest’)
• Use the best tools available to aid my development workflow
• Automate all tasks I can, for consistency, ease, and speed
• Enforce coding, documentation, and testing standards at each
level of the application
• All of which feeds into my ultimate goal of developing the best
apps I can, by enabling the developer (that's me!)
I Want It All
Session Overview
Session Content
• Application Structure
• Segregated back- and front-ends
• Services layering concepts (by nature and convention)
• Back-End
• Beans, Controllers, and M-V-C advantages
• RESTful API benefits, via HTTPServlets
• Front-End
• M-V-* and JS frameworks
• Advanced tooling for better/faster/stronger development
Concerning Application
Structure
Application Structure?
Segregation of Application Into Service Layers
• a decoupling of the layers of your application into micro-
services*
• separates the primary application logic into its own classes
• keeps the UI logic all at the UI level
• keeps styling and presentation out of the logic
• keep all your code readable by not just yourself, but others
Application Structure? (pt.2)
Application Layers (as I see them)
• data store / DB (NSF)
• primary application classes (server elements for data objects,
controllers for behavior, server actions)
• expose application via servlets (RESTful or otherwise), XPages
bindings (EL to bean, or data object)
• provides interface to UI layer (where the client-side logic lives)
Application Structure? (pt.3)
• we’re already starting to talk in terms of what we will require for an
application’s
• data
• primary business logic (which wrapped with the database
creates the data service)
• creating an API, for how a user or front-end can interface with
our service
• all of this makes our choice of front-end, be it an XPages app with
managed bean or object data source (xe:objectData) or a non-
XPages front-end immaterial far less consequential
Advantages and Disadvantages
Advantages
• consistency in an app and
across apps
• normalizing of development
patterns
• easier to:
• support/maintain
• document
• test
Disadvantages
• time
• thought
• willingness to attempt
• management sign-off
High Level Overview
Service Layers
• keeps:
• data
• logic
• client interface
• all nice and tidy, this benefits in the forms of:
• organization
• maintenance
• documentation (let’s face it, a JavaDoc is better than no
doc)
Stay With Me Now
Application Structure Related References
• Jesse Gallagher
blog: https://frostillic.us
• Dec’s Dom Blog
blog: http://www.qtzar.com/
• Pipalia
blog: http://www.pipalia.co.uk/blog/
• John Daalsgard
blog: https://www.dalsgaard-data.eu/blog/
• Paul S. Withers
http://www.intec.co.uk/blog/
Amongst many others.
Concerning the App’s Back-End
SSJS and Java
SSJS
• was meant to help bring in
gun shy developers
• com.ibm.jscript isn’t SSJS
like other (more popular)
SSJS implementations
• DDE often misses complex
context assistance as JS is
not a strongly type’d
language
Java
• is a strong type’d language
• “no” (normal API induced)
runtime exceptions
• is (more) extensible
• more industry norm
• (DD)Eclipse “does Java well”
A Horrific Pitfall
Spaghetti Code™
• un-supportable applications that have logic strewn about
through design/markup (where is the code that’s breaking?)
• overly large SSJS script libraries that add runtime parse bloat
• a lack of concise organization which any larger app needs
SSJS is a crutch (at least for non-trivial / non-RAD applications)
It works, but the overarching answer is to use the Java of XPages
for better performance, structure, and sanity.
Making Sense of the Back-End pt.1
Data as a resource…
• how should the data:
• validate
• at the db / data object level
• at the ui level
• integrate
• methods of exposure (collections, records, actions)
• with other systems
Making Sense of the Back-End pt.2
Use the best tools at your disposal!
• OpenNTF Domino API
• Git (or Mercurial)
• Swiper (to eliminate extraneous output to ODP)
• Apache Commons libraries (e.g.- CollectionUtils, validators)
• Google GSON
• Barista (for bean fans)
• Jesse’s Controllers (or whole frostillicus framework)
Java Policy
*Certain Java libraries won’t run from an NSF container (versus
OSGi plug-in) without the java.pol(icy) having additional
permissions being granted.
Setting the grant block for all permission can sound “scary”, but
really only means that you’re trusting your NSF contained Java
code to not bork your server via the class loader involved.
Back-End Components Demo (#1)
Concerning the App’s Front-End
Fasten Your Seatbelt
M-V-* and JS Frameworks
• an explosion of frameworks and libraries that can help make our
development easier
• frameworks adopting MVC, MVM, MVVM, MV* approaches to
automate the data bindings and logic
• a veritable potpourri of options and many developers have quite
different takes on which framework to use and why
• this can be highly opinionated, even heated
Advanced Tooling
• dependency management for the front-end
• scaffolding repeatable parts of development
• task runners to provision:
• distributable / deployment builds
• complete with minification/uglification
• automatic reload during development
• unit / e2e testing
• publishing documentation
In other words…
If you can, automate it!
Front-End Components Demo (#2)
Opportunity Demo (#3)
Opportunity Demo (#4)
Q&A
Summary
• we’ve covered the components of application structure options and
practices to build better applications through segregated service
layers
• …practices and techniques to automate and expedite our data
modeling and delivery of our data service with business logic,
exposing it via RESTful API (or others)
• …front-end frameworks for better UI-layers in applications
• …advanced tooling which can help aid in creating those advanced
front-ends and provide a completed picture of testing,
documentation, and deployment beyond the back-end
• we did not cover how to grow a beard
Let’s Build Happy Little Apps
Thank You
Acknowledgements and Disclaimers
Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates.
The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational
purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to
verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM
shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this
presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and
conditions of the applicable license agreement governing the use of IBM software.
All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual
environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect of,
stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.
Acknowledgements and Disclaimers cont.
© Copyright IBM Corporation 2015. All rights reserved.
• U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
• IBM, the IBM logo, ibm.com, IBM Bluemix, IBM Domino, and IBM XPages are trademarks or registered trademarks of International Business Machines
Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with
a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published.
Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright
and trademark information” at www.ibm.com/legal/copytrade.shtml
Monty Python and the Holy Grail and its images and likenesses are intellectual property (trademarked or otherwise) of the Monty Python comedy group (a.k.a.-
Monty Python’s Flying Circus).
LEGO Deadpool and its character’s likeness is trademarked and owned by Marvel and LEGO.
Range is property of Paramount Pictures and Nickelodeon Movies.
The IT Crowd is property of Talkback Thames and Retort, as aired on BBC.
The Joy of Painting, with artist Bob Ross, is property of Bob Ross and BRI Productions.
Other company, product, or service names may be trademarks or service marks of others.

More Related Content

What's hot

Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best PracticesOptimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best PracticesTeamstudio
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages ExpertsTeamstudio
 
XPages Application Layout Control - TLCC March, 2014 Webinar
XPages Application Layout Control - TLCC March, 2014 WebinarXPages Application Layout Control - TLCC March, 2014 Webinar
XPages Application Layout Control - TLCC March, 2014 WebinarHoward Greenberg
 
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8Teamstudio
 
Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app Ivano Malavolta
 
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good ServerIBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good ServerSerdar Basegmez
 
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...Serdar Basegmez
 
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...SocialBiz UserGroup
 
SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!Teamstudio
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web ComponentsRed Pill Now
 
TYPO3 5.0 Experience Concept
TYPO3 5.0 Experience ConceptTYPO3 5.0 Experience Concept
TYPO3 5.0 Experience ConceptJens Hoffmann
 
HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?Reto Meier
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal JavaPhilippe Riand
 
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 ToolsECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 ToolsEuropean Collaboration Summit
 
Extreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYExtreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYMaximiliano Firtman
 
Creating an Effective Mobile API
Creating an Effective Mobile API Creating an Effective Mobile API
Creating an Effective Mobile API Nick DeNardis
 
PowerShell for the Anxious ITPro
PowerShell for the Anxious ITProPowerShell for the Anxious ITPro
PowerShell for the Anxious ITProJason Himmelstein
 

What's hot (20)

Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best PracticesOptimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best Practices
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages Experts
 
XPages Application Layout Control - TLCC March, 2014 Webinar
XPages Application Layout Control - TLCC March, 2014 WebinarXPages Application Layout Control - TLCC March, 2014 Webinar
XPages Application Layout Control - TLCC March, 2014 Webinar
 
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
 
Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app
 
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good ServerIBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
 
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
 
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
 
SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web Components
 
[Delimon] Unraveling Teams vs Skype for Business
[Delimon] Unraveling Teams vs Skype for Business[Delimon] Unraveling Teams vs Skype for Business
[Delimon] Unraveling Teams vs Skype for Business
 
TYPO3 5.0 Experience Concept
TYPO3 5.0 Experience ConceptTYPO3 5.0 Experience Concept
TYPO3 5.0 Experience Concept
 
HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
DIWD 2011
DIWD 2011DIWD 2011
DIWD 2011
 
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 ToolsECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
 
Extreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYExtreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NY
 
Creating an Effective Mobile API
Creating an Effective Mobile API Creating an Effective Mobile API
Creating an Effective Mobile API
 
Naked and afraid Offline Mobile
Naked and afraid Offline MobileNaked and afraid Offline Mobile
Naked and afraid Offline Mobile
 
PowerShell for the Anxious ITPro
PowerShell for the Anxious ITProPowerShell for the Anxious ITPro
PowerShell for the Anxious ITPro
 

Viewers also liked

Speed geeking-lotusscript
Speed geeking-lotusscriptSpeed geeking-lotusscript
Speed geeking-lotusscriptBill Buchan
 
What the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsWhat the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsJohn Head
 
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...Teamstudio
 
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages ApplicationsIBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages Applicationsbeglee
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesCERTyou Formation
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMichael Smith
 
Connect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneConnect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneHoward Greenberg
 

Viewers also liked (7)

Speed geeking-lotusscript
Speed geeking-lotusscriptSpeed geeking-lotusscript
Speed geeking-lotusscript
 
What the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsWhat the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business Applications
 
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
 
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages ApplicationsIBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
 
Connect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneConnect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast Lane
 

Similar to A Beard, An App, A Blender

Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Developers
 
Anupam chaturvedi resume latest
Anupam chaturvedi resume  latestAnupam chaturvedi resume  latest
Anupam chaturvedi resume latestAnupam chaturvedi
 
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...confluent
 
Introduction To Software Concepts Unit 1 & 2
Introduction To Software Concepts Unit 1 & 2Introduction To Software Concepts Unit 1 & 2
Introduction To Software Concepts Unit 1 & 2Raj vardhan
 
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...confluent
 
ALM with TFS: From the Drawing Board to the Cloud
ALM with TFS: From the Drawing Board to the CloudALM with TFS: From the Drawing Board to the Cloud
ALM with TFS: From the Drawing Board to the CloudJeremy Likness
 
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013Emtec Inc.
 
Property dealing , A .net project
Property dealing , A .net projectProperty dealing , A .net project
Property dealing , A .net projectAnjali Kamboj
 
SharePoint as a Business Platform Why, What and How? – No Code
SharePoint as a Business Platform Why, What and How? – No CodeSharePoint as a Business Platform Why, What and How? – No Code
SharePoint as a Business Platform Why, What and How? – No Codedox42
 
Continuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile DevelopmentContinuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile DevelopmentNeotys
 
Testing quick interview preparation
Testing quick interview preparationTesting quick interview preparation
Testing quick interview preparationtesting1001
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net coreSam Nasr, MCSA, MVP
 
Critical Capabilities to Shifting Left the Right Way
Critical Capabilities to Shifting Left the Right WayCritical Capabilities to Shifting Left the Right Way
Critical Capabilities to Shifting Left the Right WaySmartBear
 
Encontrando la Aguja en el Rendimiento de Aplicaciones
Encontrando la Aguja en el Rendimiento de AplicacionesEncontrando la Aguja en el Rendimiento de Aplicaciones
Encontrando la Aguja en el Rendimiento de AplicacionesSoftware Guru
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Sateesh DCTM 5+ Years
Sateesh DCTM 5+ YearsSateesh DCTM 5+ Years
Sateesh DCTM 5+ Yearssatish kumar
 

Similar to A Beard, An App, A Blender (20)

Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We Do
 
Anupam chaturvedi resume latest
Anupam chaturvedi resume  latestAnupam chaturvedi resume  latest
Anupam chaturvedi resume latest
 
OOSE UNIT-1.pdf
OOSE UNIT-1.pdfOOSE UNIT-1.pdf
OOSE UNIT-1.pdf
 
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
 
Introduction To Software Concepts Unit 1 & 2
Introduction To Software Concepts Unit 1 & 2Introduction To Software Concepts Unit 1 & 2
Introduction To Software Concepts Unit 1 & 2
 
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
 
Sai_Resume
Sai_ResumeSai_Resume
Sai_Resume
 
ALM with TFS: From the Drawing Board to the Cloud
ALM with TFS: From the Drawing Board to the CloudALM with TFS: From the Drawing Board to the Cloud
ALM with TFS: From the Drawing Board to the Cloud
 
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
 
Arnab Chakraborty CV
Arnab Chakraborty CVArnab Chakraborty CV
Arnab Chakraborty CV
 
Property dealing , A .net project
Property dealing , A .net projectProperty dealing , A .net project
Property dealing , A .net project
 
SharePoint as a Business Platform Why, What and How? – No Code
SharePoint as a Business Platform Why, What and How? – No CodeSharePoint as a Business Platform Why, What and How? – No Code
SharePoint as a Business Platform Why, What and How? – No Code
 
Continuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile DevelopmentContinuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile Development
 
Testing quick interview preparation
Testing quick interview preparationTesting quick interview preparation
Testing quick interview preparation
 
DevOps101 (version 2)
DevOps101 (version 2)DevOps101 (version 2)
DevOps101 (version 2)
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net core
 
Critical Capabilities to Shifting Left the Right Way
Critical Capabilities to Shifting Left the Right WayCritical Capabilities to Shifting Left the Right Way
Critical Capabilities to Shifting Left the Right Way
 
Encontrando la Aguja en el Rendimiento de Aplicaciones
Encontrando la Aguja en el Rendimiento de AplicacionesEncontrando la Aguja en el Rendimiento de Aplicaciones
Encontrando la Aguja en el Rendimiento de Aplicaciones
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Sateesh DCTM 5+ Years
Sateesh DCTM 5+ YearsSateesh DCTM 5+ Years
Sateesh DCTM 5+ Years
 

Recently uploaded

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Recently uploaded (20)

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

A Beard, An App, A Blender

  • 1. AD-1380: A Beard, An App, A Blender Eric McCormick
  • 3. Who is talking? • Eric McCormick • developer • husband • father • veteran • former EMT • blogger • …more than I have space for edm00se.io @edm00se
  • 4. Who, continued • Web Developer at ▪ a fourth-generation, family-owned professional construction services firm, in operation since 1889 • my focus usually revolves around: ▪ document control ▪ productivity and performance metrics ▪ system integration ▪ process automation
  • 5. Who's This Session For, and Why? • Developers, who have a passion for ▪ application structure, standards, and maintenance ▪ documentation ▪ testing ▪ automation • Non-Developers (development-adjacent roles) ▪ who want a developer's take on the above
  • 7. AD-1380: A Beard, An App, A Blender… • …one developer’s take on building applications with Domino/XPages • should probably be …one developer’s take on expanding how we can build applications with Domino/XPages
  • 8. Session Abstract Building applications with Domino/XPages opens a number of doors. Choosing the right path is what becomes hard. This is a session on one developer's take on the way we can structure our applications to get the best of the Domino/XPages platform in addition to all the modern, front- end tooling that the rest of the industry is using to great advantage. This session will cover an approach to app dev via application segregation mechanics, providing the data via HttpServlets to provide a RESTful JSON API, and a UI-layer that automates the majority of concerns via a JS MV* framework. Front-end tooling via Yeoman, Grunt, and Bower (and/or others) can aid in our development and testing, back-end mocks for making contracted work easier, and other techniques.
  • 9. Ms. America Statement 1. A harmonious development environment for myself and any development staff at my company 2. A unified theory practice of development, for consistent cross- platform and cross-app development behavior 3. Making all application logic and data consistently accessible across separate, but organic, systems 4. Making contracted development work more easily performed 5. Automating everything I can
  • 10. Alternative Session Title Eric McCormick and the Quest to Develop Amazing Applications
  • 11. My Personal Goals (a.k.a.- my ‘quest’) • Use the best tools available to aid my development workflow • Automate all tasks I can, for consistency, ease, and speed • Enforce coding, documentation, and testing standards at each level of the application • All of which feeds into my ultimate goal of developing the best apps I can, by enabling the developer (that's me!)
  • 12. I Want It All
  • 14. Session Content • Application Structure • Segregated back- and front-ends • Services layering concepts (by nature and convention) • Back-End • Beans, Controllers, and M-V-C advantages • RESTful API benefits, via HTTPServlets • Front-End • M-V-* and JS frameworks • Advanced tooling for better/faster/stronger development
  • 16. Application Structure? Segregation of Application Into Service Layers • a decoupling of the layers of your application into micro- services* • separates the primary application logic into its own classes • keeps the UI logic all at the UI level • keeps styling and presentation out of the logic • keep all your code readable by not just yourself, but others
  • 17. Application Structure? (pt.2) Application Layers (as I see them) • data store / DB (NSF) • primary application classes (server elements for data objects, controllers for behavior, server actions) • expose application via servlets (RESTful or otherwise), XPages bindings (EL to bean, or data object) • provides interface to UI layer (where the client-side logic lives)
  • 18. Application Structure? (pt.3) • we’re already starting to talk in terms of what we will require for an application’s • data • primary business logic (which wrapped with the database creates the data service) • creating an API, for how a user or front-end can interface with our service • all of this makes our choice of front-end, be it an XPages app with managed bean or object data source (xe:objectData) or a non- XPages front-end immaterial far less consequential
  • 19. Advantages and Disadvantages Advantages • consistency in an app and across apps • normalizing of development patterns • easier to: • support/maintain • document • test Disadvantages • time • thought • willingness to attempt • management sign-off
  • 21. Service Layers • keeps: • data • logic • client interface • all nice and tidy, this benefits in the forms of: • organization • maintenance • documentation (let’s face it, a JavaDoc is better than no doc)
  • 23. Application Structure Related References • Jesse Gallagher blog: https://frostillic.us • Dec’s Dom Blog blog: http://www.qtzar.com/ • Pipalia blog: http://www.pipalia.co.uk/blog/ • John Daalsgard blog: https://www.dalsgaard-data.eu/blog/ • Paul S. Withers http://www.intec.co.uk/blog/ Amongst many others.
  • 25. SSJS and Java SSJS • was meant to help bring in gun shy developers • com.ibm.jscript isn’t SSJS like other (more popular) SSJS implementations • DDE often misses complex context assistance as JS is not a strongly type’d language Java • is a strong type’d language • “no” (normal API induced) runtime exceptions • is (more) extensible • more industry norm • (DD)Eclipse “does Java well”
  • 26. A Horrific Pitfall Spaghetti Code™ • un-supportable applications that have logic strewn about through design/markup (where is the code that’s breaking?) • overly large SSJS script libraries that add runtime parse bloat • a lack of concise organization which any larger app needs SSJS is a crutch (at least for non-trivial / non-RAD applications) It works, but the overarching answer is to use the Java of XPages for better performance, structure, and sanity.
  • 27. Making Sense of the Back-End pt.1 Data as a resource… • how should the data: • validate • at the db / data object level • at the ui level • integrate • methods of exposure (collections, records, actions) • with other systems
  • 28. Making Sense of the Back-End pt.2 Use the best tools at your disposal! • OpenNTF Domino API • Git (or Mercurial) • Swiper (to eliminate extraneous output to ODP) • Apache Commons libraries (e.g.- CollectionUtils, validators) • Google GSON • Barista (for bean fans) • Jesse’s Controllers (or whole frostillicus framework)
  • 29. Java Policy *Certain Java libraries won’t run from an NSF container (versus OSGi plug-in) without the java.pol(icy) having additional permissions being granted. Setting the grant block for all permission can sound “scary”, but really only means that you’re trusting your NSF contained Java code to not bork your server via the class loader involved.
  • 33. M-V-* and JS Frameworks • an explosion of frameworks and libraries that can help make our development easier • frameworks adopting MVC, MVM, MVVM, MV* approaches to automate the data bindings and logic • a veritable potpourri of options and many developers have quite different takes on which framework to use and why • this can be highly opinionated, even heated
  • 34. Advanced Tooling • dependency management for the front-end • scaffolding repeatable parts of development • task runners to provision: • distributable / deployment builds • complete with minification/uglification • automatic reload during development • unit / e2e testing • publishing documentation
  • 35. In other words… If you can, automate it!
  • 39. Q&A
  • 40. Summary • we’ve covered the components of application structure options and practices to build better applications through segregated service layers • …practices and techniques to automate and expedite our data modeling and delivery of our data service with business logic, exposing it via RESTful API (or others) • …front-end frameworks for better UI-layers in applications • …advanced tooling which can help aid in creating those advanced front-ends and provide a completed picture of testing, documentation, and deployment beyond the back-end • we did not cover how to grow a beard
  • 41. Let’s Build Happy Little Apps
  • 43. Acknowledgements and Disclaimers Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.
  • 44. Acknowledgements and Disclaimers cont. © Copyright IBM Corporation 2015. All rights reserved. • U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. • IBM, the IBM logo, ibm.com, IBM Bluemix, IBM Domino, and IBM XPages are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml Monty Python and the Holy Grail and its images and likenesses are intellectual property (trademarked or otherwise) of the Monty Python comedy group (a.k.a.- Monty Python’s Flying Circus). LEGO Deadpool and its character’s likeness is trademarked and owned by Marvel and LEGO. Range is property of Paramount Pictures and Nickelodeon Movies. The IT Crowd is property of Talkback Thames and Retort, as aired on BBC. The Joy of Painting, with artist Bob Ross, is property of Bob Ross and BRI Productions. Other company, product, or service names may be trademarks or service marks of others.

Editor's Notes

  1. The advantages sell themselves. As for disadvantages, if anyone believes it’s more time consuming to approach a proper layout to an application when it’s being initially constructed or in its infancy, there is virtually no cost. Converting takes time, so lay your foundation well. I used to think that my management would have some difficulty accepting my thoughts and approaches on the higher level side of my application development efforts, but when it came down to it, after running into multiple issues over multiple years with our largest app (which I maintain and continue development on in a few areas), I’ve found that the more I do talk with my management about the larger issues, the more they assume I have any tedium handled. This has taken a few years but has paid dividends; especially when it comes to building trust with my management after several creative solutions following the POODLE + other HTTPS/SSL debacles over the last year or so. In other words, when your management take you seriously when you prefix a thought with “Eric’s crazy talk”, you’ve reached a level of trust; trust cultivated from time and effort spent not just on creating widget X, but also understanding the ramifications of that widget, it’s interactions, and how it will work in a deployed, at scale capacity.
  2. Focusing on application structure and the flow of data (which is how my head works). There are great other angles to look at an application before/during/after during continuing development, such as user interactions (how many clicks, ease of access), but when it comes to interfacing with data, which is usually my biggest concern, this is what makes sense to me.
  3. Rango may be in a whole heap of trouble for all his tall tales, but “stay with me now”.
  4. I’m not the only one talking about app structure. In fact, this is probably one of the most common 2nd or 3rd order themes amongst developers since applications began being developed. Here are some references which have been great additions for the cause in the Domino / XPages world.
  5. Domino/XPages SSJS is a weird beast, only supports up through ECMAScript 4, and while you can specify a variable’s type (using colon notation), it’s not the norm for most people. Also, if you’re going to specify type for each variable, what’s the big complaint about Java? “No runtime exceptions” = shouldn’t be likely, if ever. If only we could deal with a native API that doesn’t throw NotesExceptions for about everything. Eclipse “does java well” in the sense that the content assistance and overall Java editor experience is an excellent standard.
  6. Some have avoided Java in XPages because Java is “scary”. While some may seem daunted, it’s not that hard for a developer to pick up, has been around long enough to be a mature language, performs
  7. As my data service diagram depicts, there are options. Finding the needs of an application, connections and integrations with other systems and points of entry, so to speak, can help drive our direction.
  8. Note: some of these require a change in the java.pol(icy) file for security permissions. Non-obvious things: GSON lets you reflect data from JSON to a proper Java Object (by its class definition) in addition to a convenient toJson method; it sure beats the snot out of typing out the lines for creating a new object, create new property (by type), then setting the value, etc. Swiper eliminates a lot of the “bloat” of syncing with an On Disk Project (ODP) and is what allowed me to take our largest app to its first, prototype stage of build automation using headless DDE (was previously generating too many conflicting design elements, making the app non-usable OoB).
  9. What I chose and why, along with other options.
  10. My quest isn’t over, as I’m learning something new every day.