2/23/2010

Organizando código de uma classe decentemente

Uma das coisas que eu gosto muito em programação é a organização do código em si, daí sempre fiquei pensando em qual seria o padrão mais usado para ordenar o código em uma classe por exemplo, mas nunca conseguia achar nada muito interessante e nem eu mesmo conseguia fazer algo que eu gostasse. Daí, lendo um pouco sobre GWT vi um padrão bem legal postado aqui, na sessão "Class Structure and Member Sort Order".

Padrão sugerido
Java types should have the following member order:

1. Nested Types (mixing inner and static classes is okay)
2. Static Fields
3. Static Initializers
4. Static Methods
5. Instance Fields
6. Instance Initializers
7. Constructors
8. Instance Methods

Members that fall into the same category (e.g. static methods) should also be sorted in this order based on visibility:

1. public
2. protected
3. default
4. private

All methods should be sorted alphabetically. Sorting is optional but recommended for fields.

Exemplo de código:
public abstract class Foo {
  // Type declarations.
  public class FooBaz {
  }
 
  private class FooBar {
  }

  // Static field declarations.
  // Remember, fields do NOT need to be sorted.
  static String B;
  static String A;

  // Static initializer declarations.
  static {
  }

  // Static methods declarations.
  // Remember, methods do need to be sorted.
  static void aStatic() {
  }

  static void bStatic() {
  }

  // Instance field declaration.
  String bField;
  String aField;

  // Instance Initializer declarations.
  {
  }

  // Constructors declaration.
  public Foo() {
  }

  protected Foo(String s) {
  }

  Foo(int i) {
  }

  private Foo(boolean b) {
  }

  // Instance method declaration.
  public void b() {
  }

  public void c() {
  }

  protected void a() {
  }

  protected void d() {
  }

  protected void e() {
  }

  protected void f() {
  }

  String h() {
  }

  // The "abstract" keyword does not modify the position of the method.
  abstract String i();

  void j() {
  }

  private void g() {
  }
}

Esse padrão eu achei bem elegante e pretendo utilizá-lo em minhas classes a partir de agora.

Nenhum comentário: