   @method fields
   @param  {string}    Unknown arguments, each argument is the name of field.
   ###
-  @fields: (attributes...) ->
+  @define: (@fields = {}) ->
     @records = {}
-    @attributes = attributes or []
+    @names = (field for field of @fields)
     @
 
   ###

  Instance repository
  ###
  @records  = {}

  ###
  Observer reference

  constructor: (attributes = {}, handler, events = DEFAULT_EVENTS) ->
    @constructor.className = @constructor.name
    @constructor.records[@uid = _guid()] = @
    for field, define of @constructor.fields when attributes[field] or define.default?
      if typeof @[field] is 'function'
        @[field] attributes[field] or define.default
      else
        @[field] = attributes[field] or define.default
    @observe handler, events if handler?
    @

