_Standards.txt - All classes should follow these. - JH
Last updated 11/23/99. We are keeping these small.

=======================================================
       >>>>> MINIMAL CODING STANDARDS <<<<<

 Code must be very understandable. THE MOST IMPORTANT
    IMPLEMENTATION GOAL IS UNDERSTANDABILITY, BY BOTH
    THE USER AND DEVELOPER.

 Comment all classes and public methods fully.
 Add models or links when necessary.
 Use comments liberally. Err on the side of more rather than less.
 Use white space to deliniate intentional blocks.

 All code must satisfy our architectural requirements.
 A current high level model must exist for all code.

 Start all classes with the template, keep organized.
 Emulate JavaSoft code for curly brace and indent style.
 Indent 4 spaces.
 One outer class or interface per file.
 Keep normal inner classes at the end of the class in one place,
     under the comment:
 //========== Inner Classes ======================================


 A good class does one thing and does it well.
 Strive for low coupling, high cohesion.
 Keep it simple. Be conservative.
 
 Use very careful when naming. This makes code self documenting.
 Start class names with an upper case letter.
 Start method and variable names with a lower case letter.
 No magic numbers or cryptic variable names besides i, j, k.
 
 Use constructors with arguments only when appropriate.
 All class fields should be protected except for constants that
     need to be made public.
 Use getters and setters in the Bean Spec style.
 Use events in the Bean Spec style, except no source object.
 Recursive methods must be marked as RECURSIVE.
 Minimize inheritence. Use composition/delegation instead.
 Keep classes under 200 LOC plus comments, with deliberate exceptions.
 
 IF - Always use braces unless on same line with if and short statement.

 List custom imports before java imports.
 Alphabetize imports but group for clarity.
 All lowercase package names.
 Explicitly import classes unless many from same package.

 Good code should be so well written and follow these
    standards so closely that you cannot tell who wrote
    it, except for the author's name. Be humble....

======================================================
    >>>>> Class Naming Conventions - Suffixes <<<<<

Note the suffix is the class role.

-- Well known patterns -----
View, Model, Controller - Per standard MVC Pattern. The
    controller is generally a business object.
Proxy - Per standard Proxy Pattern
Factory - Creates instances on demand

-- Other -----
Mgr - Manages a collection or subsystem
Def - Defines a parameter used in another class, which has
    multiple such definitions. Often parameter driven.
Accessor - Carries data for accessing something
Pool - Provides a collection of instances ready for work
Set - Contains a set of like items, ie a RowSet contains rows

Lib - Library with all static fields and methods
Row, Map - Collection of name/value pairs
Event, Listener - Per Java beans spec
Source - An event source. Emits callbacks
Supplier - Supplies something on demand
Std - Standard interface implementation

Test - The unit test for a class
Services - Fascade for a subsystem, ie DatastoreServices

======================================================
    >>>>> Method Naming Conventions <<<<<

Follow the Java Bean spec for getters, setters, boolean
properties, events, listeners.

------- Method Prefixes ----------

-- Simple accessors

getPropertyName() - This should return the same
  value every time, unless its been changed by a set() or
  the class has done some "significant" internal change.
  Calling get() should not cause lots of work or state change,
  to allow class inspection.

createXXX() - Use this when a different, and probably new,
  instance is returned every time. For example a Factory
  will have a createXXX(), and Services classes often have them.

loadXXX() - Use this when neither getXXX() or createXXX()
  is appropriate. (not sure what's a good standard here)

-- Other
put - Use this when previous values may be overwritten.
add - Use this when previous value is irrelevant or not allowed.
put, remove - Return the previous value or null if none.
removeAll - Empties the collection.