Last active
November 6, 2017 07:56
-
-
Save YoneMoreno/093585c0e4542dafaef42a2642b46c04 to your computer and use it in GitHub Desktop.
Factory pattern with cache in js Node https://app.pluralsight.com/player?course=javascript-practical-design-patterns&author=jonathan-mills&name=javascript-practical-design-patterns-m3&clip=12&mode=live and Factory pattern using a forEach loop ;=)
This file contains 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
var Task = require('./task'); | |
var repoFactory = require('./repoFactorywCache'); | |
var task1 = new Task(repoFactory.getRepo('task').get(1)); | |
var task2 = new Task(repoFactory.getRepo('task').get(2)); | |
var user = repoFactory.getRepo('user').get(1); | |
var project = repoFactory.getRepo('project').get(1); | |
task1.user = user; | |
task1.project = project; | |
//console.log(task1); | |
task1.save(); |
This file contains 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
var Task = require('./task'); | |
var repoFactory = require('./repoFactory2'); | |
var task1 = new Task(repoFactory.task.get(1)); | |
var task2 = new Task(repoFactory.task.get(2)); | |
var user = repoFactory.user.get(1); | |
var project = repoFactory.project.get(1); | |
task1.user = user; | |
task1.project = project; | |
//console.log(task1); | |
task1.save(); |
This file contains 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
var repo = function () { | |
var db = {}; | |
var get = function (id) { | |
console.log('Getting project ' + id); | |
return { | |
name: 'New project' | |
} | |
} | |
var save = function (project) { | |
console.log('Saving ' + project.name + ' to the db'); | |
} | |
return { | |
get: get, | |
save: save | |
} | |
} | |
module.exports = repo; |
This file contains 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
var repoFactory = function(){ | |
var repos = this; | |
var repoList = [{name:'task', source:'./taskRepository'}, | |
{name:'user', source:'./userRepository'}, | |
{name:'project', source:'./projectRepository'}]; | |
repoList.forEach(function(repo){ | |
repos[repo.name] = require(repo.source)() | |
}); | |
}; | |
module.exports = new repoFactory; |
This file contains 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
var repoFactory = function (){ | |
this.getRepo = function (repoType){ | |
if(repoType==='task'){ | |
if(this.taskRepo){ | |
console.log('Retrieving from CACHE') | |
return this.taskRepo; | |
}else{ | |
this.taskRepo = require('./taskRepository')(); | |
return this.taskRepo; | |
} | |
} | |
if(repoType==='user'){ | |
var userRepo = require('./userRepository')(); | |
return userRepo; | |
} | |
if(repoType==='project'){ | |
var projectRepo = require('./projectRepository')(); | |
return projectRepo; | |
} | |
} | |
}; | |
module.exports = new repoFactory; |
This file contains 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
var Repo = require('./taskRepository')(); | |
var Task = function (data) { | |
this.name = data.name; | |
this.completed = false; | |
} | |
Task.prototype.complete = function () { | |
console.log('completing task: ' + this.name); | |
this.completed = true; | |
}; | |
Task.prototype.save = function () { | |
console.log('saving Task: ' + this.name); | |
Repo.save(this); | |
}; | |
module.exports = Task; |
This file contains 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
var repo = function () { | |
var db = {}; | |
var get = function (id) { | |
console.log('Getting task ' + id); | |
return { | |
name: 'new task from db' | |
} | |
} | |
var save = function (task) { | |
console.log('Saving ' + task.name + ' to the db'); | |
} | |
console.log('newing up task repo'); | |
return { | |
get: get, | |
save: save | |
} | |
} | |
module.exports = repo; |
This file contains 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
var repo = function () { | |
var db = {}; | |
var get = function (id) { | |
console.log('Getting user ' + id); | |
return { | |
name: 'Yone Moreno' | |
} | |
} | |
var save = function (user) { | |
console.log('Saving ' + user.name + ' to the db'); | |
} | |
return { | |
get: get, | |
save: save | |
} | |
} | |
module.exports = repo; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment