The MSF Application Model for Development (MSF Application Model) provides a multi-layer services-based approach to designing and developing software applications. MSF views an application at a logical level as a network of cooperative, distributed, and reusable services that support a business solution. Application services are units of application logic that include methods for implementing an operation, function, or transformation. These services should be accessed through a published interface, driven by the interface specification, focus value toward the customer not the provider, and map directly to actions. As mentioned in Chapter 1, the MSF Application Model describes applications as using three services: user, business, and data. These services allow for parallel development, better use of technology, easier maintenance and support, and flexibility in distributing the application's services. These user, business, and data services can reside anywhere in the environment from a single desktop to servers and clients around the world.
User Services are logic that provides an application with its user interface. The user interface is not necessarily visually conveyed; it can be programmatic, as the user may be a person or another application. User Services seek to hide or isolate information views from the application's user interface structure.
Business Services are logic that controls the sequencing and enforcing of business rules. These services provide transactional integrity as well as transform data into information through the application of business rules.
Data Services are logic that provides the lowest visible level of detail used to manipulate data. Data Services seek to maintain consistent application data, as well as separate the application's design and implementation from the location and structure of the data store. Most Data Services provide the ability to define, create, read, update, and delete data.
The MSF Application Model establishes the definitions, rules and relationships that form the actual structure of an application. It is designed to influence the approach the team takes for building applications.