-
-
Save wayneseymour/90222865e77155eade49e4f0550fd0ef to your computer and use it in GitHub Desktop.
OO => FP architecture refactor
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
// Simple example, but the idea holds for more complex objects. | |
/* 1) Start with OO */ | |
// user.js | |
class User { | |
constructor(firstName, lastName, email) { | |
this.firstName = firstName | |
this.lastName = lastName | |
this.email = email | |
} | |
fullName() { | |
return [this.firstName, this.lastName].join(' ') | |
} | |
serialize() { | |
return {firstName: this.firstName, lastName: this.lastName, email: this.email} | |
} | |
spam() { | |
Emailer.reminderTpl(this.serialize).send() | |
} | |
} | |
export default User | |
/* 2) Next we make constructors into factories, methods into fns, and separate actions from calcs */ | |
// user.js | |
const User = (firstName, lastName, email) => ({firstName, lastName, email}) | |
const fullname = (firstName, lastName) => [firstName, lastName].join(' ') | |
const spamTemplate = user => Emailer.reminderTpl(user) | |
const sendSpam = tpl => tpl.send() | |
/* 3) Generalize names, reorganize */ | |
// format.js | |
const joinWithSpace = (x, y) => [x, y].join(' ') | |
module.exports = {joinWithSpace} | |
// User was literally just the json we got from the server or db | |
// Spam did nothing other than delegate to Emailer | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment