What to Avoid in Your Design

This note will list few things you should try to avoid in your design. Please also see notes on SOLID Principles and summary of additional design principles and best practices.

  1. Run-Time Type Identification (RTTI)

    • Design that require you to check for the actual type of the reference object should be avoided (e.g. if(type(something) = something, do something). 

  2. Cyclomatic complexity (CC)

    • It directly measures the number of linearly independent paths through a program's source code (e.g. the number of if-else-if statements in a function).

    • Note that for every path you need to add at least one additional test case to your unit test cases.

    • As a good practice, we should avoid this as much as possible or limit this to less than 10.

  3. Swiss knife syndrome

    • ‘Swiss Army Knife’ is often used to describe a collection of useful items or tools that are able to perform well in multiple scenarios.

    • The more complex a piece of code or software gets, the less value it provides, and it will be more difficult to maintain.

    • An example is the usual util class. This is the opposite of SRP.

  4. Lookup

    • Only use as a last resort as in the case of caching.  

  5. Bidirectional coupling and cyclic coupling

    • ​Create maintenance nightmares

  6. God class

    • A class that does everything should be avoided.

    • God class will need a God Man, who is the only person who can understand and modify that class.

  7. Downcast

    • Abandon downcast

 

Latest version of this note can be found @ http://codingarchitect.com/things-to-avoid-in-your-object-oriented-design.

References and notes: 
  1. Head First Design Patterns By Eric Freeman, Elisabeth Freeman, Bert Bates, Kathy Sierra

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)