All Projects → mbasso → Refraction

mbasso / Refraction

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

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Refraction

Pipedream
Connect APIs, remarkably fast. Free for developers.
Stars: ✭ 2,068 (+1269.54%)
Mutual labels:  data-flow
Nuxt Image Loader Module
An image loader module for nuxt.js that allows you to configure image style derivatives.
Stars: ✭ 135 (-10.6%)
Mutual labels:  module
Pytorchchamferdistance
Implementation of the Chamfer Distance as a module for pyTorch
Stars: ✭ 139 (-7.95%)
Mutual labels:  module
Sgf
This is a Smart Game Foundation (Not Framework)
Stars: ✭ 122 (-19.21%)
Mutual labels:  module
Androidmodulesamples
🎨基于 MVP + RxJava + Retrofit + EventBus + Arouter 的 Android 组件化开发框架实践
Stars: ✭ 129 (-14.57%)
Mutual labels:  module
Godotads
Godot all in one ads module for Android. (Customizable)
Stars: ✭ 137 (-9.27%)
Mutual labels:  module
Tinypart
TinyPart is an iOS modularization framework implemented by Ojective-C. It also supports URL-routing and inter-module communication. TinyPart是一个由Objective-C编写的面向协议的iOS模块化框架,同时它还支持URL路由和模块间通信机制。
Stars: ✭ 120 (-20.53%)
Mutual labels:  module
Include.js
A tiny but heavy on-demand async javascript/css loader
Stars: ✭ 146 (-3.31%)
Mutual labels:  module
Cohesion
A tool for measuring Python class cohesion.
Stars: ✭ 129 (-14.57%)
Mutual labels:  module
Terraform Aws Airship Ecs Service
Terraform module which creates an ECS Service, IAM roles, Scaling, ALB listener rules.. Fargate & AWSVPC compatible
Stars: ✭ 139 (-7.95%)
Mutual labels:  module
Dffml
The easiest way to use Machine Learning. Mix and match underlying ML libraries and data set sources. Generate new datasets or modify existing ones with ease.
Stars: ✭ 123 (-18.54%)
Mutual labels:  data-flow
Mis
模块接口服务,如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块?
Stars: ✭ 124 (-17.88%)
Mutual labels:  module
Ngx Model
Angular Model. Simple state management with minimalistic API, one way data flow, multiple model support and immutable data exposed as RxJS Observable.
Stars: ✭ 137 (-9.27%)
Mutual labels:  data-flow
Nest Raven
Sentry Raven Module for Nest.js Framework
Stars: ✭ 123 (-18.54%)
Mutual labels:  module
Quill Cursors
A multi cursor module for Quill text editor.
Stars: ✭ 139 (-7.95%)
Mutual labels:  module
Container Query
A PostCSS plugin and Javascript runtime combination, which allows you to write container queries in your CSS the same way you would write media queries.
Stars: ✭ 119 (-21.19%)
Mutual labels:  module
React In Patterns
A free book that talks about design patterns/techniques used while developing with React.
Stars: ✭ 10,948 (+7150.33%)
Mutual labels:  data-flow
Flow View
is a visual editor for Dataflow programming
Stars: ✭ 148 (-1.99%)
Mutual labels:  data-flow
Wallutils
🌆 Utilities for handling monitors, resolutions, wallpapers and timed wallpapers
Stars: ✭ 145 (-3.97%)
Mutual labels:  module
Web Vitals Module
Web Vitals: Essential module for a healthy Nuxt.js
Stars: ✭ 138 (-8.61%)
Mutual labels:  module

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].