Skip to content

Instantly share code, notes, and snippets.

@felipecesr
felipecesr / HttpClient.js
Last active February 24, 2019 16:06
Dependency Inversion Principle (DIP)
export class HttpClient {
get(url) {
return fetch(url).then(response => response.json());
}
}
$space-unit: 16px;
$spacer-xxs : round($space-unit * .25); // 4px
$spacer-xs : round($space-unit * .5); // 8px
$spacer-sm : round($space-unit * .75); // 12px
$spacer-md : round($space-unit * 1.25); // 20px
$spacer-lg : round($space-unit * 2); // 32px
$spacer-xl : round($space-unit * 3.25); // 52px
$spacer-xxl : round($space-unit * 5.25); // 84px
class ProdutoDesconto extends Produto {
constructor(nome, preco, desconto) {
super(nome, preco);
this.desconto = desconto;
}
salvar(storage) {
const comDesconto = { nome: this.nome, preco: this.preco - (this.preco * this.desconto) };
storage.store(comDesconto);
return storage.length;
@felipecesr
felipecesr / main.js
Last active November 16, 2018 13:02
const produtos = [
{ nome: 'ProdutoA', preco: 28.90 },
{ nome: 'ProdutoB', preco: 34.40 },
{ nome: 'ProdutoC', preco: 149.90, desconto: 0.2 }
];
function insereTodos(produtos) {
const storage = new ProdutoStorage(); //{1}
for (let p of produtos) { //{2}
let produto;
if (p.desconto) {
produto = new ProdutoDesconto(p.nome, p.preco, p.desconto);
} else {
produto = new Produto(p.nome, p.preco);
}
class ProdutoStorage {
constructor() {
this.produtos = [];
}
get length() {
return this.produtos.length;
}
store(produto) {
class ProdutoDesconto extends Produto {
constructor(nome, preco, desconto) {
super(nome, preco);
this.desconto = desconto;
}
salvar(storage) {
const comDesconto = { nome: this.nome, preco: this.preco - (this.preco * this.desconto) };
storage.store(comDesconto);
return comDesconto;
class Produto {
constructor(nome, preco) {
this.nome = nome;
this.preco = preco;
}
salvar(storage) {
storage.store({ nome: this.nome, preco: this.preco });
return storage.length;
}
class List extends Component {
constructor(items) {
super();
this._items = items;
}
// getters/setters ...
render(element) {
element.innerHTML = `
class Card extends Component {
constructor(description) {
super();
this._description = description;
}
// getters/setters ...
render(element) {
element.innerHTML = `