1.0.1 • Published 3 years ago

simple-service-object v1.0.1

Weekly downloads
15
License
GPL-3.0
Repository
github
Last release
3 years ago

simple-service-object

Simple service object pattern for javascript classes

Example usage

Define a class that inherits from ServiceObject, the class must overwrite the perform() method.

Optionally defaultResultData() and raisableError() could be overwritten to define a default behavior.

Define a service class

const { ServiceObject, ResultSuccess, ResultFailure } = require('simple-service-object')

class MyErrorClass extends Error { }

class MyService extends ServiceObject {
  defaultResultData() {
    return { hello: 'world' }
  }

  raisableError() {
    return MyErrorClass
  }

  perform(objectType) {
    // Service logic...
    switch(objectType) {
      case 'serviceObject': {
        return new ResultSuccess({ foo: 'bar' })
      }
      case 'simpleObject': {
        return new ResultFailure({ errorParam: 'simple object' })
      }
      case 'badObject': {
        throw 'bad object'
      }
      default: {
        return new ResultSuccess()
      }
    }
  }
}

module.exports = MyService

Call the service

let myService = MyService.perform()
myService.success // true
myService.hello // world

myService = MyService.perform('serviceObject')
myService.success // true
myService.foo // bar
myService.hello // world
myService.failure // false

myService = MyService.perform('simpleObject')
myService.failure // true
myService.errorParam // simple object
myService.success // false

myService = MyService.perform('badObject')
myService.failure // true
myService.errors[0] // MyErrorClass: bad object ...
myService.errors[0].message // bad object

// performUnsage will throw the exception
myService = MyService.performUnsafe('badObject') // Uncaught MyErrorClass: is a bad object

This library was inspired by Aldous gem https://github.com/envato/aldous