base-domain
simple module to help build Domain-Driven Design
Last updated 3 years ago by cureapp .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install base-domain 
SYNC missed versions from official npm registry.

Circle CI

![Stories in Progress](https://badge.waffle.io/CureApp/base-domain.png?label=In%20Progress&title=In Progress)

base-domain

framework for Domain-Driven Design in JavaScript (or CoffeeScript, recommended.)

latest API documentation Page

installation

$ npm install -g base-domain

concept

base-domain helps easier practice of Domain-Driven Design.

  1. list models in the domain of your concern (by your own way)
  2. define models with base-domain
  3. define their factories with base-domain
  4. define their repositories with base-domain
  5. define services with base-domain if needed

essential classes and relations

  • Base
  • Facade
  • BaseModel
  • BaseFactory
  • BaseRepository
  • BaseService
  • Entity
  • AggregateRoot
  • ValueObject
  • BaseList
  • BaseDict

class relations

Base

API Doc

  • Base is an origin of all classes
  • Base has Facade
  • Base does not have any other properties or methods

Facade

API Doc

  • Facade is the gate of all classes
  • Facade knows all classes
  • Facade is module-exported in base-domain: require('base-domain') returns Facade class

BaseModel

API Doc

  • BaseModel is a base class of model
  • essential methods for model are defined
  • BaseModel is a child of Base

BaseFactory

API Doc

  • BaseFactory is a base class of factory
  • BaseFactory creates specific BaseModel instance
  • BaseFactory is a child of Base

BaseRepository

API Doc

  • BaseRepository is a base class of repository
  • BaseRepository connects to database, filesystem or other external data resources (settings needed).
  • BaseRepository saves specific BaseModel to data resources
  • BaseRepository read BaseModels from data resources
  • BaseRepository has BaseFactory (to generate BaseModel from data resources)

ValueObject

API Doc

  • ValueObject is child of BaseModel
  • instance of ValueObject does not have id
  • ValueObject.isEntity is false
  • that's all of ValueObject

Entity

API Doc

  • Entity is child of BaseModel
  • instance of Entity has id
  • Entity.isEntity is true

AggregateRoot

API Doc

  • AggregateRoot is child of Entity
  • AggregateRoot implements RootInterface, thus it can create other models, factories and repositories.

BaseList

API Doc

  • BaseList is child of ValueObject
  • BaseList has many BaseModels as items
  • BaseList#items is array of specific BaseModel

BaseDict

API Doc

  • BaseDict is child of ValueObject
  • BaseDict has many BaseModels as items
  • BaseDict#items is dictionary of key => specific BaseModel
  • BaseDict.key is function to get key from item

usage

model definition

model is classified into "Entity" and "ValueObject"

Entity is model with id, ValueObject is model without id.

# {domain-dir}/hospital.coffee
class Hospital extends require('base-domain').Entity

    # property types
    @properties:
        name         : @TYPES.STRING
        address      : @TYPES.STRING
        beds         : @TYPES.NUMBER
        registeredAt : @TYPES.DATE
        isValidated  : @TYPES.BOOLEAN
        doctors      : @TYPES.MODEL 'doctor-list'
        flags        : @TYPES.MODEL 'flag-dict'
        state        : @TYPES.ENUM ['PREPARED', 'RUNNING', 'CLOSED']

module.exports = Hospital

properties definition

@TYPES.XXX is an object and also a function.

    @properties:
        aaa: @TYPES.STRING
        bbb: @TYPES.NUMBER 3
        ccc: @TYPES.MODEL 'foo-bar'
mark property type meaning arg1 arg2
x @TYPES.ANY prop accepts any type default value
x @TYPES.STRING prop is string default value
x @TYPES.NUMBER prop is number default value
x @TYPES.DATE prop is date default value
x @TYPES.BOOLEAN prop is boolean default value
x @TYPES.ARRAY prop is array default value
x @TYPES.OBJECT prop is object default value
x @TYPES.BUFFER prop is buffer default value
x @TYPES.GEOPOINT prop is geopoint default value
o @TYPES.CREATED_AT date set when first saved default value
o @TYPES.UPDATED_AT date set each time saved default value
o @TYPES.MODEL prop is BaseModel model name id prop name (if model is Entity)
o @TYPES.ENUM prop is index of the alternatives alternatives default value

Types with marked "x" just provide the name of the type. base-domain does not validate the prop's type.

factory definition

# {domain-dir}/hospital-factory.coffee
class HospitalFactory extends require('base-domain').BaseFactory

    @modelName: 'hospital'

module.exports = HospitalFactory

repository definition

# {domain-dir}/hospital-repository.coffee
class HospitalRepository extends require('base-domain').BaseRepository

    @modelName: 'hospital'

module.exports = HospitalRepository

use them by facade

domain = require('base-domain').createInstance
    dirname: '/path/to/domain-dir'


Hospital = domain.getModel('hospital')
hospitalFactory = domain.createFactory('hospital')
hospitalRepository = domain.createRepository('hospital')

hosp = hospitalFactory.createFromObject(name: 'Suzuki Clinic')


hospitalRepository.query(where: name: 'CureApp Hp.').then (hospitals)->
    console.log hospitals

list definition

# {domain-dir}/hospital-list.coffee
class HospitalList extends require('base-domain').BaseList

    @itemModelName: 'hospital'

module.exports = HospitalList

dict definition

# {domain-dir}/hospital-dict.coffee
class HospitalDict extends require('base-domain').BaseDict

    @itemModelName: 'hospital'
    @key: (item) -> item.id

module.exports = HospitalDict

Current Tags

  • 5.2.0                                ...           latest (3 years ago)

147 Versions

  • 5.2.0                                ...           3 years ago
  • 5.1.9                                ...           3 years ago
  • 5.1.8                                ...           3 years ago
  • 5.1.7                                ...           3 years ago
  • 5.1.6                                ...           4 years ago
  • 5.1.5                                ...           4 years ago
  • 5.1.4                                ...           4 years ago
  • 5.1.3                                ...           4 years ago
  • 5.1.2                                ...           4 years ago
  • 5.1.1                                ...           4 years ago
  • 5.1.0                                ...           4 years ago
  • 5.0.5                                ...           4 years ago
  • 4.7.7                                ...           4 years ago
  • 5.0.4                                ...           4 years ago
  • 5.0.3                                ...           4 years ago
  • 4.7.6                                ...           4 years ago
  • 5.0.2                                ...           4 years ago
  • 5.0.1                                ...           4 years ago
  • 5.0.0                                ...           4 years ago
  • 4.7.5                                ...           4 years ago
  • 4.7.4                                ...           4 years ago
  • 4.7.3                                ...           4 years ago
  • 4.7.2                                ...           4 years ago
  • 4.7.1                                ...           4 years ago
  • 4.7.0                                ...           4 years ago
  • 4.6.1                                ...           4 years ago
  • 4.6.0                                ...           4 years ago
  • 4.5.4                                ...           4 years ago
  • 4.5.3                                ...           4 years ago
  • 4.5.2                                ...           4 years ago
  • 4.5.1                                ...           4 years ago
  • 4.5.0                                ...           4 years ago
  • 4.4.2                                ...           4 years ago
  • 4.4.1                                ...           4 years ago
  • 4.4.0                                ...           4 years ago
  • 4.3.7                                ...           4 years ago
  • 4.3.6                                ...           4 years ago
  • 4.3.5                                ...           4 years ago
  • 4.3.4                                ...           4 years ago
  • 4.3.3                                ...           4 years ago
  • 4.3.1                                ...           4 years ago
  • 4.3.0                                ...           4 years ago
  • 4.2.1                                ...           4 years ago
  • 4.2.0                                ...           4 years ago
  • 4.1.3                                ...           4 years ago
  • 4.1.2                                ...           4 years ago
  • 4.1.1                                ...           4 years ago
  • 4.1.0                                ...           4 years ago
  • 4.0.0                                ...           4 years ago
  • 3.8.0                                ...           4 years ago
  • 3.7.0                                ...           4 years ago
  • 3.6.5                                ...           5 years ago
  • 3.6.4                                ...           5 years ago
  • 3.6.3                                ...           5 years ago
  • 3.6.2                                ...           5 years ago
  • 3.6.1                                ...           5 years ago
  • 3.6.0                                ...           5 years ago
  • 3.5.0                                ...           5 years ago
  • 3.4.3                                ...           5 years ago
  • 3.4.2                                ...           5 years ago
  • 3.4.1                                ...           5 years ago
  • 3.4.0                                ...           5 years ago
  • 3.3.2                                ...           5 years ago
  • 3.3.1                                ...           5 years ago
  • 3.3.0                                ...           5 years ago
  • 3.2.0                                ...           5 years ago
  • 3.1.4                                ...           5 years ago
  • 3.1.3                                ...           5 years ago
  • 3.1.2                                ...           5 years ago
  • 3.1.1                                ...           5 years ago
  • 3.1.0                                ...           5 years ago
  • 3.0.4                                ...           5 years ago
  • 3.0.3                                ...           5 years ago
  • 3.0.2                                ...           5 years ago
  • 3.0.1                                ...           5 years ago
  • 3.0.0                                ...           5 years ago
  • 2.2.0                                ...           5 years ago
  • 2.1.4                                ...           5 years ago
  • 2.1.3                                ...           5 years ago
  • 2.1.2                                ...           5 years ago
  • 2.1.1                                ...           5 years ago
  • 2.1.0                                ...           5 years ago
  • 1.9.6                                ...           5 years ago
  • 1.9.5                                ...           5 years ago
  • 1.9.4                                ...           5 years ago
  • 1.9.3                                ...           5 years ago
  • 1.9.2                                ...           5 years ago
  • 1.9.1                                ...           5 years ago
  • 1.9.0                                ...           5 years ago
  • 1.8.7                                ...           5 years ago
  • 1.8.6                                ...           5 years ago
  • 1.8.5                                ...           5 years ago
  • 1.8.4                                ...           5 years ago
  • 1.8.3                                ...           5 years ago
  • 1.8.2                                ...           5 years ago
  • 1.8.1                                ...           5 years ago
  • 1.8.0                                ...           5 years ago
  • 1.7.3                                ...           5 years ago
  • 1.7.2                                ...           5 years ago
  • 1.7.1                                ...           5 years ago
  • 1.7.0                                ...           5 years ago
  • 1.6.0                                ...           5 years ago
  • 1.5.4                                ...           5 years ago
  • 1.5.3                                ...           5 years ago
  • 1.5.2                                ...           5 years ago
  • 1.5.1                                ...           5 years ago
  • 1.5.0                                ...           5 years ago
  • 1.4.2                                ...           5 years ago
  • 1.4.1                                ...           5 years ago
  • 1.4.0                                ...           5 years ago
  • 1.3.0                                ...           5 years ago
  • 1.2.1                                ...           5 years ago
  • 1.2.0                                ...           5 years ago
  • 1.1.7                                ...           5 years ago
  • 1.1.6                                ...           5 years ago
  • 1.1.5                                ...           5 years ago
  • 1.1.4                                ...           5 years ago
  • 1.1.3                                ...           5 years ago
  • 1.1.2                                ...           5 years ago
  • 1.1.1                                ...           5 years ago
  • 1.1.0                                ...           5 years ago
  • 1.0.0                                ...           5 years ago
  • 0.7.4                                ...           5 years ago
  • 0.7.3                                ...           5 years ago
  • 0.7.2                                ...           5 years ago
  • 0.7.1                                ...           5 years ago
  • 0.6.3                                ...           5 years ago
  • 0.6.2                                ...           5 years ago
  • 0.6.1                                ...           5 years ago
  • 0.6.0                                ...           5 years ago
  • 0.5.4                                ...           5 years ago
  • 0.5.3                                ...           5 years ago
  • 0.5.2                                ...           5 years ago
  • 0.5.1                                ...           5 years ago
  • 0.5.0                                ...           5 years ago
  • 0.4.1                                ...           5 years ago
  • 0.4.0                                ...           5 years ago
  • 0.3.9                                ...           5 years ago
  • 0.3.8                                ...           5 years ago
  • 0.3.7                                ...           5 years ago
  • 0.3.5                                ...           5 years ago
  • 0.3.4                                ...           5 years ago
  • 0.3.2                                ...           5 years ago
  • 0.3.1                                ...           5 years ago
  • 0.1.14                                ...           5 years ago
  • 0.1.13                                ...           5 years ago
  • 0.1.12                                ...           5 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (5)
Dev Dependencies (10)

Copyright 2014 - 2016 © taobao.org |