Giter Site home page Giter Site logo

mbasso / refraction Goto Github PK

View Code? Open in Web Editor NEW
151.0 6.0 5.0 654 KB

A guard that represents a central point of control in your application

Home Page: http://refraction.js.org/

License: MIT License

JavaScript 100.00%
refraction module mediator unidirectional data-flow

refraction's Introduction

Refraction

Build Status npm version npm downloads Coverage Status Join the chat at https://gitter.im/mbasso/refraction

A guard that represents a central point of control in your application.

Modern javascript applications are often organized into modules, which are awesome but have some problems that we can't avoid. When we are writing an application in this way, we must consider that all our modules must be independent, testable, instantly reusable and secure. Refraction's purpose is to make these concerns take care of themselves by using some design patterns. Since modules might be independent, with no inter-module dependencies, Refraction adds an intermediate layer that handles all messages that an application uses, allowing communication between modules. This way, modules don't need to know each other, only the layer that is responsible for managaging communication. If we want to change a module, we can do so without worrying about how other modules use it. Modules have a very limited knowledge of what's going in the rest of the system. For this reason, we can define refraction as a guard, a central point of control.

Installation

You can install Refraction using npm:

npm install --save refraction

If you aren't using npm in your project, you can include Refraction using UMD build in the dist folder with <script> tag.

Usage

Refraction exposes only a small set of APIs. What is important to know is it's concept. A complete guide about usage can be found here. However, here is the gist:

import Refraction from 'refraction';

class CustomRefraction extends Refraction {

  routeChange(route) {
    this.publish('routeChange', {
      type: 'route',
      payload: route,
    });
  }
}

class RouteManager {

  routeChange({ payload }) {
    window.location.href = payload;
  }
}

class ConsoleManager {

  routeChange({ payload }) {
    console.log(`New location = ${payload}`);
  }
}

const routeMiddleware = (param) => {
  const result = Object.assign({}, param);
  if (result && result.type === 'route') {
    // build complete url
    result.payload = `${window.location.protocol}//${window.location.host}${result.payload}`;
  }
  return result;
}

const refractionInstance = new CustomRefraction([ routeMiddleware ]);
const routeManager = new RouteManager();
const consoleManager = new ConsoleManager();

refractionInstance.subscribe(routeManager);
refractionInstance.subscribe(consoleManager);

// change route and log
refractionInstance.routeChange('home');

Documentation

Examples

You can find a series of examples in this repository under the examples folder. Alternatively, you can check awesome-refraction.

If you want to run examples, check out the instructions here.

Chat

This project has an official chat channel on gitter. This is the right place to talk about Refraction with us and others developers. Feel free to participate.

Join chat here.

Change Log

This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented on the Github Releases page.

Inspiration

Refraction is inspired by different articles and tools:

  • Its architecture is inspired by this article based on Addy Osmani's talk of the same name, presented at LondonJS.
  • Its style is inspired by Redux

Authors

Matteo Basso

Adriano Buscema

Copyright and License

Copyright (c) 2016, Matteo Basso.

Refraction source code is licensed under the MIT License.

refraction's People

Contributors

adribusc avatar justingreenberg avatar jvandyke avatar mbasso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.