EmaCodingGuidelines

Last edit July 7, 2004
What is Ema? WikiSquatting?

Many of these are fairly bad guidelines to boot. Such as? Many of them are similar to what we use.

  • All Objects are exposed as Interface to enforce the "Programming to Interfaces rather than Classes" concept

  • Test cases should be written to ensure the services provided by objects can be tested with only the minimal required dependency

  • Development follows the pattern of
  • Define Interfaces
  • Create mock implementation wherever required
  • Write test cases
  • Package so that it can be used by other developers
  • Actual implementation of interface

  • Ensure the environment is set up to share the common settings such as the file/code templates in IDEA

  • All package names should be in lowercase

  • In the set methods of the members, ensure the incoming param is named as new<member>
	e.g. 
	   public class UserImpl implements User {
	     private String userName;
	     :
	     :

public String setUserName( String newUserName){ userName = newUserName(); }

:
	   }

  • Do not use "this.<member>" code as the "this." not only makes the code dense also some compilers do not support it.
	e.g. 
	   this.userName = userName;  --> Bad

userName = newUserName; --> Good

  • Ensure all classes/members/methods are named clearly

  • Provide adequate documentation

  • Use formatCode/optimizeImports in IDEA to cleanup code

  • Refactoring is different from adding new feature, changing/enhancing existing functionality.
  It provides an opportunity to review your code for better usage.

  • Use ToDo tag to identify tasks you need to work on

  • Organize the packages such that it is more meaningful and also can be grouped and converted into jars with less effort

  • Wrap the conditional statements always
	e.g.

GOOD ---- if ( var1 = value1) { //do something }

BAD --- if ( var1 = value1) //do something

  • Class/Interface Names always starts with Uppercase and words separated by camelCase
	e.g.
	Good >>
	    public class TestClassForClassNaming {
	    }

Bad >> public class Testclassforclassnaming { }

public class testClassForClassNaming { }

  • Method Names always starts with lowerCase and words separated by camelCase
	e.g.
	Good >>
	    public void testMethodForMethodNaming {
	    }

Bad >> public class TestMethodForMethodNaming { }

public class testmethodformethodnaming { }

  • Constant Names are always in UpperCase and words separated by '_'
	e.g.
	Good >>
	    public final String TEST_CONSTANT = "TEST";

Bad >> public final String testconstant = "TEST";

public final String Testconstant = "TEST";

public final String TestConstant = "TEST";

  • Member Names always start with lowerCase and words separated by camelCase
	e.g.
	Good >>
	    private String testMember;

Bad >> private String TestMember;

private String Testmember;

private String testmember;

  • When using Singleton get the instance always from an Instance provider such as the com.ema.core.utils.ClassInstance and/or using a Proxy Bean factory

  • Use Parentheses to clearly depict the expressions

  • Try to avoid multiple return points