What is an application platform?
I'm working on a short paper / presentation that describes my position on what an application platform is, the services it provides, and what it does for the application developer. This is this initial outline. This doesn't talk about a specific (LOB) application platform, but instead talks about a set of requirements that a platform should meet. One of the things that started me down this path was noticing partners using the Microsoft CRM application as a platform. I'm curious to understand how other people think about this "problem" and whether there's any benefit in pursuing the definition.
I want to set the stage by talking about what I mean by "application" first. This paper will look at large-scale line of business applications. This isn't to say that productivity applications such as Office aren't applications, it's just that they're not the class of application that necessarily has this set of requirements.
Diversion
Line of business applications
- Tools for automating the business process
Productivity applications
- Tools for executing business tasks
Caveat
- A platform isn’t useful without an application
- It’s not possible to determine requirements without an application
- Most people aren’t interested in buying a platform – they want an application
- An application is the start, customers and partners want a solution
Then I'll talk about the necessary and sufficient requirements for a platform. I'm trying to keep this list as short as possible because most application logic tends to leak "down" into a platform thereby making the platform less applicable to other applications.
Platform services
Identity and roles
Rich type library
Security
Storage and persistence
Extensibility
Process identification and execution
Solution packaging and containment
Deployment models
Identity and roles
What is a “user” of the system?
Collaboration scenarios drive SaaS
Roles come in many flavors
- Work roles (position), security roles, reporting structures
Roles are facets of an identity
Relationships between roles are primary
Rich type library
-
- Constituents
- party, role, relationship, contactMethod
- Collaborations
- collaboration, interaction, goal, participation, structuredDocument
- Unstructured collateral
- simpleDocument, annotation
- Opaque data
- Reference data, lookup tables, auditing, etc.
- Constituents
Data types
- enumerations, elemental types, higher-level types
Security
Authorization and authentication
Security roles are privilege collections
Privileges provide access
- User interface, data, process, tasks
Security roles trump work roles
Storage and persistence
Storage structure is schema independent
- From an application perspective
Storage is disconnected from logic
- From an application perspective
The platform controls persistence
- Types DO NOT know how to persist themselves
Extensibility
Schema
- Types and storage
Presentation
- Navigation
- Data capture
- Clients and user interface
Process
- Business rules (simple and compound validation)
- Business logic (“big” and “little” process definition)
- Process execution structures (message definitions)
Process identification and execution
Message definition and execution
Actor identification by identity and role
Task and work lists
Loosely bound to an extreme
Declarative vs. imperative
Long-running business processes
Transactional business logic
One entry point to execute processes
Solution packaging and containment
Everything is an extension
- Schema, process, presentation
All extensions are named and grouped
- Names are like CLR strong names
Packages are like applications or modules
Deployment models
- Multi-tenancy is important
- Multi-language per tenant
- Presentation is independent of the platform
- But the platform can provide presentation tools