Tight vs Loose Coupling
Tight vs Loose Coupling
In
object oriented design, the amount of coupling refers to how much the design of
one class depends on the design of another class. In other words, how often do
changes in class A force related changes in class B? Tight coupling means the
two classes often change together, loose coupling means they are mostly
independent. In general, loose coupling is recommended because it's easier to
test and maintain.
Tight coupling
Think
of your skin. It's stuck to your body. It fits like a glove. But what if you
wanted to change your skin colour from say white to black? Can you imagine just
how painful it would be to peel off your skin, dye it, and then to paste it
back on etc? Changing your skin is difficult because it is tightly coupled to
your body. You just can't make changes easily. You would have to fundamentally
redesign a human being in order to make this possible. Key Point #1 In
other words, if you want to change the skin, you would also HAVE TO change
the design of your body as well because the two are joined together - they
are tightly coupled. God was not a good object oriented programmer.
Loose coupling
Now
think of getting dressed in the morning. You don't like blue? No problems: you
can put a red shirt on instead. You can do this easily and effortlessly because
the shirt is not really connected to your body the same way as your skin. The
shirt doesn't know or care about what body it is going on. In other words, you
can change your clothes, without really changing your body. That's key point
#2.If
you change your shirt, then you are not forced to change your body - when
you can do that, then you have loose coupling. When you can't do that, then you
have tight coupling.
That's
the basic concept in a nutshell.
Why is all of this important?
It's
important because software changes all the time. Generally speaking you want to
be able to easily modify your code. If somebody wants their car in black, you
shouldn't have to reconfigure the engine in order to make that change. That's
why you want things loosely coupled. Because then it's easy to change.
Hope this helps.
Tight
coupling is when a group of classes are highly dependent on one another.
This
scenario arises when a class assumes too many responsibilities, or when one
concern is spread over many classes rather than having its own class.
Loose
coupling is achieved by means of a design that promotes single-responsibility
and separation of concerns.
A
loosely-coupled class can be consumed and tested independently of other
(concrete) classes.
Interfaces
are a powerful tool to use for decoupling. Classes can communicate through
interfaces rather than other concrete classes, and any class can be on the
other end of that communication simply by implementing the interface.
Example of tight coupling:
class CustomerRepository
{
private readonly Database database;
public CustomerRepository(Database
database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer",
CustomerName);
}
}
class Database
{
public void AddRow(string Table, string
Value)
{
}
}
Example of loose coupling:
class CustomerRepository
{
private readonly IDatabase database;
public CustomerRepository(IDatabase
database)
{
this.database = database;
}
public void Add(string CustomerName)
{
database.AddRow("Customer",
CustomerName);
}
}
interface IDatabase
{
void AddRow(string Table, string Value);
}
class Database : IDatabase
{
public void AddRow(string Table, string
Value)
{
}
}
|
If
you still have any question you can reach me any time through email
(jigyasu2010@hotmail.com)
Comments
Post a Comment