<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Loose_Coupling</id>
	<title>Loose Coupling - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Loose_Coupling"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Loose_Coupling&amp;action=history"/>
	<updated>2026-04-14T23:42:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Loose_Coupling&amp;diff=7245&amp;oldid=prev</id>
		<title>Izabela Szlachta at 18:44, 8 November 2012</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Loose_Coupling&amp;diff=7245&amp;oldid=prev"/>
		<updated>2012-11-08T18:44:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Cat|SOA|30}}&lt;br /&gt;
{{Soa Links}}&lt;br /&gt;
&lt;br /&gt;
==Scalability==&lt;br /&gt;
*Scalability can be understood as:&lt;br /&gt;
**an ability to add new features&lt;br /&gt;
**increase the utilization (number of users, requests, the size of data, etc..) of an existing system&lt;br /&gt;
*Minimizing the impact of modifications and failures on the system landscape as a whole&lt;br /&gt;
*Maintainability&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Need for Fault Tolerance==&lt;br /&gt;
*No time for well-elaborated, robust system designs.&lt;br /&gt;
*Changing requirements&lt;br /&gt;
*A flight booking system failure may cost $100,000 an hour, a credit card system breakdown may cost $300,000 an hour, and a stock-trading malfunction may cost $8 million an hour. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loose Coupling==&lt;br /&gt;
*The aim of loose coupling is to minimize dependencies.&lt;br /&gt;
*When there are fewer dependencies, modifications to or faults in one system will have fewer consequences on other systems.&lt;br /&gt;
*Loose coupling is a principle; it is neither a tool, nor a checklist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forms of loose coupling==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! Tight Coupling&lt;br /&gt;
! Loose Coupling&lt;br /&gt;
|-&lt;br /&gt;
! Physical connections&lt;br /&gt;
| Point-to-point&lt;br /&gt;
| Via mediator&lt;br /&gt;
|-&lt;br /&gt;
! Communication style&lt;br /&gt;
| Synchronous&lt;br /&gt;
| Asynchronous&lt;br /&gt;
|-&lt;br /&gt;
! Data model&lt;br /&gt;
| Common complex types&lt;br /&gt;
| Simple common types only&lt;br /&gt;
|-&lt;br /&gt;
! Type system&lt;br /&gt;
| Strong&lt;br /&gt;
| Weak&lt;br /&gt;
|-&lt;br /&gt;
! Interaction pattern&lt;br /&gt;
| Navigate through complex object trees&lt;br /&gt;
| Data-centric, self-contained message&lt;br /&gt;
|-&lt;br /&gt;
! Control of process logic&lt;br /&gt;
| Central control&lt;br /&gt;
| Distributed control&lt;br /&gt;
|-&lt;br /&gt;
! Binding&lt;br /&gt;
| Statically&lt;br /&gt;
| Dynamically&lt;br /&gt;
|-&lt;br /&gt;
! Platform&lt;br /&gt;
| Strong platform dependencies&lt;br /&gt;
| Platform independent&lt;br /&gt;
|-&lt;br /&gt;
! Transactionality&lt;br /&gt;
| 2PC (two-phase commit) &lt;br /&gt;
| Compensation&lt;br /&gt;
|-&lt;br /&gt;
! Deployment&lt;br /&gt;
| Simultaneous&lt;br /&gt;
| At different times&lt;br /&gt;
|-&lt;br /&gt;
! Versioning&lt;br /&gt;
| Explicit upgrades&lt;br /&gt;
| Implicit upgrades&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Asynchronous Communication==&lt;br /&gt;
[[File:Soa-asynchronous-communication.png|150px]]&lt;br /&gt;
&lt;br /&gt;
*The systems exchanging service messages do not have to be online at the same time&lt;br /&gt;
*Long answering times don’t block the service consumer&lt;br /&gt;
*Logic of the service consumer gets (much) more complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Heterogeneous Data Types==&lt;br /&gt;
*Systems can modify their data types without directly affecting other systems (modified service interfaces affect only corresponding consumers)&lt;br /&gt;
*You have to map data types from one system to another&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mediators==&lt;br /&gt;
*First type is when sender may know the physical address of the called system (broker or name server). You ask for a service using a symbolic name, and the broker or &amp;#039;&amp;#039;&amp;#039;name server&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*The second type chooses the right endpoint for a request after the consumer sends it. The consumer sends the request to a symbolic name, and the infrastructure  (network, middleware, ESB) routes the call to the appropriate system.&lt;br /&gt;
&amp;lt;signavio&amp;gt;db15170c373443ddb86acbb951d7831e:6b917110afabbb9222984d181c713f027eae6441f5d27f2b37cef37f79b4670_da11319251f89a85b7c12d4c0a9415975eeccaf58a2d7568bdc8b5b458afac9_e3769e91c9c32c5ddcd4c9edd315e675eefe328de711f781791d911c8befe&amp;lt;/signavio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weak Type Checking and Binding==&lt;br /&gt;
*Early and late binding &lt;br /&gt;
*Generic ESB&lt;br /&gt;
**ESB isn&amp;#039;t coupled with any of the systems&lt;br /&gt;
**only general statistics&lt;br /&gt;
**general routing&lt;br /&gt;
*Type specific ESB&lt;br /&gt;
**Details statistics&lt;br /&gt;
**Routing based on specific conditions (type, value in a element, source, etc..)&lt;br /&gt;
**There is a dependency between the type and the ESB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Interaction Patterns==&lt;br /&gt;
*Are only strings supported, or can other fundamental data types (integers, floats, Booleans, date/time types, etc.) be used?&lt;br /&gt;
*Are enumerations supported?&lt;br /&gt;
*Can you constrain possible values (e.g., define certain string formats)?&lt;br /&gt;
*Can you build higher types (structures, records)?&lt;br /&gt;
*Can you build sequence types (arrays, lists)?&lt;br /&gt;
*Can you design relations between types (inheritance, extensions, polymorphism)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Compensation==&lt;br /&gt;
*Two-phase commit (2PC)&lt;br /&gt;
*If only one modification is successful, you then “compensate” for the problem appropriately&lt;br /&gt;
*System updates don’t have to be performed synchronously &lt;br /&gt;
*You have to explicitly provide and call services that revert previous services or programs for manual error handling&lt;br /&gt;
*BPEL supports compensation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Control of Process Logic==&lt;br /&gt;
*Process-control decisions can also lead to different forms of coupling. Having one central component controlling the whole process logic creates a bottleneck because each involved system must connect with it (Orchestration, BPM)&lt;br /&gt;
*Decentralized or distributed control (where each component does its job and knows which component will continue after) you avoid bottlenecks (Choreography, CEP)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
*Simultaneous deployment creates dependency&lt;br /&gt;
*The more loosely coupled approach of updating at different times, however, leads to a very important drawback: the need for migration, which leads to versioning&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Versioning==&lt;br /&gt;
With a more loosely coupled form of data type versioning, the consumer won’t have to do anything as long as the modifications are backward compatible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Summery==&lt;br /&gt;
*Loose coupling is a fundamental concept of SOA aimed at reducing dependencies between different systems.&lt;br /&gt;
*There are different forms of loose coupling, and you will have to find the mixture of   tight and loose coupling that’s appropriate for your specific context and project.&lt;br /&gt;
*Any form of loose coupling has drawbacks. For this reason, loose coupling should  never be an end in itself.&lt;br /&gt;
*The need to map data is usually a good property of large systems.&lt;/div&gt;</summary>
		<author><name>Izabela Szlachta</name></author>
	</entry>
</feed>