Created
March 27, 2019 14:01
-
-
Save michaelwclark/7590c8bc25dba2be9fcf67ea60f566b9 to your computer and use it in GitHub Desktop.
Dependancy injection using Functional Composition
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const DbProvider = params => { | |
| console.log({params}) | |
| return {db :'db', ...params} | |
| } | |
| const LogProvider = params => { | |
| console.log({params}) | |
| return {logger: 'logger', ...params} | |
| } | |
| const addUsersFn = params => { | |
| return params | |
| } | |
| const compose = (...fns) => x => fns.reduceRight((y, f) => f(y), x) | |
| const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x) | |
| const addUsers = params => compose(addUsersFn, LogProvider, DbProvider)({params}) | |
| const addUsers2 = params => pipe(LogProvider, DbProvider, addUsersFn)({params}) | |
| console.log(addUsers('hello')) | |
| console.log(addUsers2('hello')) | |
| const asyncDBProvider = async params => { | |
| console.log(params) | |
| return Promise.resolve({db: 'asyncdb', ...params}) | |
| } | |
| const asyncLogProvider = async params =>{ | |
| console.log(params) | |
| return Promise.resolve({log: 'asynclog', ...params}) | |
| } | |
| const asyncAddUsersFn = params => { | |
| console.log(params) | |
| return params | |
| } | |
| const asyncCompose = (...fns) => x => fns.reduceRight(async (y, f) => await f(await y), x) | |
| const asyncPipe = (...fns) => x => fns.reduce(async (y, f) => await f(await y), x) | |
| const asyncAddUsers = params => asyncCompose(asyncAddUsersFn, asyncLogProvider, asyncDBProvider)({params}) | |
| const asyncAddUsers2 = params => asyncPipe(asyncLogProvider, asyncDBProvider, asyncAddUsersFn)({params}) | |
| console.log(asyncAddUsers('hello').then(x=>{ | |
| console.log(x) | |
| })) | |
| console.log(asyncAddUsers2('hello').then(x=>{ | |
| console.log(x) | |
| })) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment