CSC/ECE 517 Fall 2009/wiki2 16 am: Difference between revisions
No edit summary |
|||
Line 14: | Line 14: | ||
<p> A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. | <p> A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. | ||
<ul><li>It is a description or template for how to solve a problem that can be used in many different situations.</li> | <ul><li>It is a description or template for how to solve a problem that can be used in many different situations.</li> | ||
<li>Object-oriented design patterns typically show relationships and interactions between | <li>Object-oriented design patterns typically show relationships and interactions between entities, without specifying the final actual clients that are involved. </li> | ||
<li>Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. </li> | <li>Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. </li> | ||
<li>Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.</li> </ul></p> | <li>Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.</li> </ul></p> |
Revision as of 21:21, 8 October 2009
Why do we need SOA
The objective of building a system is to achieve simplicity of usage and reuse existing software solutions for new challenges. Simplicity is lost in the process when real dependencies are overtaken by artificial dependencies. To differentiate between real and artificial dependencies, let us consider the example when we travel overseas on business. We know that we must bring our own power adapters along or life can be miserable. The real dependency is that we need power; the artificial dependency is that our plug must fit into the local outlet. So in order to build a simple system, the principle needs to be such that 'artificial dependencies should be reduced to the minimum but real dependencies should not be altered'. To achieve this principle, we seek the idea of SOA.
Lets define SOA
So with this problem in mind, service-oriented architecture (SOA) can be defined as an architectural design pattern that concerns itself with defining loosely-coupled relationships between producers and consumers. A service is a unit of work done by a service provider to achieve desired end results for a service consumer. Both provider and consumer are roles played by software agents on behalf of their owners. It provides us with a set of principles of governing concepts used during phases of systems development and integration. Such an architecture will package functionality as 'interoperable services' ( As in the example given above, Adapters for plugs ): software modules provided as a service can be integrated or used by several organizations, even if their respective client systems (Different power outlets) are substantially different . It is an attempt to develop yet another means for software module integration.
Rather than defining an API or a bunch of hierarchical classes, SOA defines the interface in terms of protocols and functionality. An endpoint is the entry point to such an SOA implementation. SOA separates functions into distinct units, or services[1], which developers make accessible over a network in order to allow users to combine and reuse them in the production of applications. These services communicate with each other by passing data from one service to another, or by coordinating an activity between two or more services.
Design patterns
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code.
- It is a description or template for how to solve a problem that can be used in many different situations.
- Object-oriented design patterns typically show relationships and interactions between entities, without specifying the final actual clients that are involved.
- Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation.
- Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.
Role of design patterns in SOA
When carrying out an SOA initiative, we need to pay attention to many design details with every service we deliver, while always keeping the big picture in our sights. Design patterns support us in maintaining this balance by helping us overcome common obstacles that have historically inhibited or even derailed SOA project plans. They establish an environment that is conducive not just to enabling the creation of effective service-oriented solutions, but also to enabling the effective long-term governance and evolution of the individual services that can be composed and recomposed to comprise these solutions.
Categories of SOA Design Patterns
Category | Objective |
---|---|
Foundational Inventory Patterns | These patterns define an SOA model with an emphasis on service inventory architecture. Examples: enterprise inventory, domain inventory, service normalization. |
Logical Inventory Layer Patterns | These patterns establish service layers based on utility service models, business-logic entity service models, and single-purpose task service models. Examples: utility abstraction, entity abstraction, process abstraction. |
Inventory Centralization Patterns | These patterns address physical aspects of service inventory architecture. Examples: process centralization, schema centralization, policy centralization. |
Inventory Implementation Patterns | These patterns help solve implementation-level problems. Examples: dual protocols, canonical resources, state repository. |
Inventory Governance Patterns | These patterns supply fundamental design-time solutions for post-implementation services evolution. Examples: canonical expression, metadata centralization, canonical versioning. |
Foundational Service Patterns | These patterns represent the steps required to partition and organize logic into services and capabilities. Examples: functional decomposition, service encapsulation, agnostic context. |
Service Implementation Patterns | These patterns impact or augment the physical implementation of the service architecture, to help respond to ongoing changes, address scalability, and runtime message processing. Examples: service façade, redundant implementation, service data replication. |
Service Security Patterns | These patterns extend service design in support of increased protection from security threats. Examples: exception shielding, message screening, trusted subsystem. |
Service Contract Design Patterns | These patterns help position contracts as independent yet still central parts of service architectures. Examples: decoupled contract, contract centralization, contract denormalization. |
Legacy Encapsulation Patterns | These patterns address common challenges with service encapsulation of legacy systems and environments. Examples: legacy wrapper, multi-channel endpoint, file gateway. |
Service Governance Patterns | These patterns help evolve services without compromising their responsibilities as active members of the service inventory. Examples: compatible change, version identification, termination notification. |
Capability Composition Patterns | These patterns provide a means by which to assemble and compose together the service logic resulting from service identification and definition patterns. Examples: capability composition, capability recomposition. |
Service Messaging Patterns | These patterns provide various techniques for processing and coordinating data exchanges between services. Examples: service messaging, messaging metadata, service agent. |
Composition Implementation Patterns | These patterns provide design solutions that address implementation-level issues pertaining primarily to runtime service activity management and composition structure. Examples: agnostic sub-controller, composition autonomy, atomic service transaction. |
Service Interaction Security Patterns | These patterns focus on applying security at the message level. Examples: data confidentiality, data origin authentication, direct authentication. |
Transformation Patterns | These patterns address the interoperability obstacles of communications, data formats, and data models. Examples: data model transformation, data format transformation, protocol bridging. |
Common Compound Design Patterns | These patterns document the effects of applying multiple patterns together. Examples: official endpoint, federated endpoint layer, three-layer inventory. |
How SOA design patterns differ from the traditional GoF patterns
- What is the aim of design patterns --
SOA patterns are more about Modeling, Design, Architecture
GoF patterns are about Modeling, Design, Architecture and Programming - What do the design patterns expose --
SOA patterns expose services
GoF patterns expose methods - What level of granularity do the design patterns provide --
SOA patterns exhibit business-level granularity
GoF patterns exhibit component/object-level granularity - How is interaction provided in the patterns --
SOA patterns interact at the service-level, inter-service via service requests
GoF patterns interact component/object-level, inter-objects/components via method calls - Standards for patterns --
SOA patterns are in the nascent stages. They are being collected and organised from emerging best practices.
GoF patterns contain a lot of best practices and excellent tools. They have a mature knowledge base in the industry.