base-domain
Version:
simple module to help build Domain-Driven Design
153 lines (107 loc) • 2.19 kB
text/coffeescript
'use strict'
Collection = require './collection'
###*
list class of DDD pattern.
@class BaseList
@extends Collection
@module base-domain
###
class BaseList extends Collection
###*
the number of items
@property itemLength
@type number
@public
###
Object.defineProperty @::, 'itemLength',
get: ->
return 0 if not @loaded()
@items.length
###*
items: array of models
@property {Array} items
###
###*
@constructor
@params {any} props
@params {RootInterface} root
###
constructor: (props = {}, root) ->
super(props, root)
###*
@method initItems
@protected
###
initItems: ->
@items = []
###*
@method addItems
@param {Array(BaseModel|Object)} items
@protected
###
addItems: (items) ->
super
if @sort
@items.sort(@sort)
if @isItemEntity
@ids = (item.id for item in @items)
###*
add item to @items
@method addItem
@protected
@param {BaseModel} item
###
addItem: (item) ->
@items.push item
###*
remove item by index
@method remove
@param {Number} index
###
remove: (index) ->
return if not @loaded()
@items.splice(index, 1)
@ids.splice(index, 1) if @isItemEntity
###*
sort items in constructor
@method sort
@protected
@abstract
@param modelA
@param modelB
@return {Number}
###
#sort: (modelA, modelB) ->
###*
first item
@method first
@public
###
first: ->
return undefined if not @loaded()
@items[0]
###*
last item
@method last
@public
###
last: ->
return undefined if not @loaded()
@items[@length - 1]
###*
get item by index
@method getByIndex
@public
###
getByIndex: (idx) ->
return undefined if not @loaded()
@items[idx]
###*
export models to Array
@method toArray
@public
###
toArray: ->
return [] if not @loaded()
@items.slice()
module.exports = BaseList