JSFiddle - React, Tailwind, and code Playground

by ludydoo

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>

JavaScript

BusinessRuleRepository = function() {
  this.rules = [];
}

BusinessRuleRepository.prototype.addRule = function(aModelClass, operation, callback) {
  this.rules.push({
    class: aModelClass,
    operation: operation,
    callback: callback
  })
}

BusinessRuleRepository.prototype.validate = function(object, operation, args) {
  _.forIn(this.rules, function(rule) {
    if (object.constructor == rule.class && operation == rule.operation) {
      rule.callback(object, args)
    }
  })

}

MyObject = function() {
  this.a = 2;
}
MyObject.prototype.setA = function(value) {
  aBusinessRuleRepo.validate(this, 'setA', arguments);
  this.a = value;
}

// Creating the repository

var aBusinessRuleRepo = new BusinessRuleRepository();

aBusinessRuleRepo.addRule(MyObject, 'setA', function(object, args) {
  if (args[0] < 0) {
    throw 'Invalid value A';
  }
})

// Creating the object

var aObject = new MyObject();

try {
  aObject.setA(-1); // throws
} catch (err) {
  alert(err);
}

aObject.setA(2);