DRY (Don't repeat yourself) – avoids duplication in code
·
Don't write duplicate code, instead use Abstraction to
abstract common things in one place.
·
If you have block of code in more than two place consider
making it a separate method, or if you use a hard-coded value more than one
time make them public final constant.
·
Benefit of this Object oriented design principle is in
maintenance.
·
It's important not to abuse it, duplication is not for
code, but for functionality.
·
It means, if you used common code to validate OrderID
and SSN it doesn’t mean they are same or they will remain same in future.
·
By using common code for two different functionality
or thing you closely couple them forever and when your OrderID changes its
format, your SSN validation code will break.
·
So beware of such coupling and just don’t combine
anything which uses similar code but are not related.
Encapsulate What Changes – hides implementation details, helps in maintenance
·
Only one thing is constant in software field and that
is "Change", so encapsulate the code you expect or suspect to be
changed in future.
·
Benefit of this OOPS Design principle is that It’s easy
to test and maintain proper encapsulated code.
·
If you are coding in Java then follow principle of
making variable and methods private by default and increasing access step by
step e.g. from private to protected and not public.
·
Several of design pattern in Java uses Encapsulation, Factory
design pattern is one example of Encapsulation which encapsulate object
creation code and provides flexibility to introduce new product later with no
impact on existing code.
Open Closed
Design Principle – open for
extension, closed for modification
·
Classes, methods or functions should be Open for
extension (new functionality) and Closed for modification.
·
This is another beautiful SOLID design principle,
which prevents some-one from changing already tried and tested code.
·
Ideally if you are adding new functionality only than
your code should be tested and that's the goal of Open Closed Design principle.
·
By the way, Open Closed principle is "O"
from SOLID acronym.
Single
Responsibility Principle (SRP) – one class should
do one thing and do it well
·
Single Responsibility Principle is another SOLID
design principle, and represent “S" on SOLID acronym.
·
As per SRP, there should not be more than one reason
for a class to change, or a class should always handle single functionality.
·
If you put more than one functionality in one Class in
Java it introduce coupling between two
functionality and even if you change one functionality there is chance you
broke coupled functionality, which
require another round of testing to avoid any surprise on production
environment.
Dependency
Injection or Inversion principle – don’t ask, let
framework give to you
·
Don't ask for dependency it will be provided to you by
framework.
·
This has been very well implemented in spring
framework, beauty of this design principle is that any class which is injected
by DI framework is easy to test with mock object and easier to maintain because
object creation code is centralized in framework and client code is not
littered with that.
·
There are multiple ways to implemented Dependency
injection like using byte code instrumentation which some AOP (Aspect Oriented
programming) framework like AspectJ does or by using proxies just like used in spring.
·
It represent "D" on SOLID acronym.
Favor Composition
over Inheritance – Code reuse
without cost of inflexibility
·
Always favor composition over inheritance, if
possible.
·
Some of you may argue this, but I found that
Composition is lot more flexible than Inheritance.
·
Composition allows to change behavior of a class at
run-time by setting property during run-time and by using Interfaces to compose
a class we use polymorphism which provides flexibility of to replace with
better implementation any time.
Liskov
Substitution Principle (LSP) – Subtype must be
substitutable for super type
·
According to Liskov Substitution Principle, Subtypes
must be substitutable for super type i.e. methods or functions which uses super
class type must be able to work with object of sub class without any
issue".
·
LSP is closely related to Single responsibility
principle and Interface Segregation Principle.
·
If a class has more functionality than subclass might
not support some of the functionality, and does violated LSP.
·
In order to follow LSP SOLID design principle, derived
class or sub class must enhance functionality, but not reduce them. LSP represent
“L" on SOLID acronym.
Interface
Segregation principle (ISP) – avoid monolithic
interface, reduce pain on client side
·
Interface Segregation Principle stats that, a client
should not implement an interface, if it doesn't use that.
·
This happens mostly when one interface contains more
than one functionality, and client only need one functionality and not other.
·
Interface design is tricky job because once you
release your interface you cannot change it without breaking all
implementation.
·
Another benefit of this design principle in Java is,
interface has disadvantage to implement all method before any class can use it
so having single functionality means less method to implement.
Programming for
Interface not implementation – helps in
maintenance, improves flexibility
·
Always program for interface and not for
implementation this will lead to flexible code which can work with any new
implementation of interface.
·
So use interface type on variables, return types of
method or argument type of methods in Java.
Delegation
principle – don’t do all
things by yourself, delegate it
·
Don't do all stuff by yourself, delegate it to
respective class.
·
Classical example of delegation design principle is
equals() and hashCode() method in Java.
·
In order to compare two object for equality we ask class
itself to do comparison instead of Client class doing that check.
·
Benefit of this design principle is no duplication of
code and pretty easy to modify behavior.
[Design Patterns Interview Questions]
We recommend you take Big Data Hadoop class room training at eMexo Technologies in electronic city, Bangalore to learn more about Big Data Hadoop.
0 Comments:
Post a Comment