Desidero il tuo feedback su alcune best practice sulla relazione di design tra oggetti, specialmente quando è coinvolto un oggetto singleton.
Immaginiamo di dover simulare un negozio con i clienti.
Nella mia applicazione c'è un solo negozio e un cliente appartiene solo a quel negozio.
Quando il negozio si chiude devo avvisare ogni cliente.
Sotto qualche pseudo codice.
In entrambi gli approcci considero un negozio come un singolo oggetto.
Nell'approccio 01, chiamo addCustomer in negozio.
Nell'approccio 02, chiamo addCustomer quando effettivamente creo un oggetto Cliente mantenendo un riferimento su Shop in ogni cliente .
Credo che un terzo approccio potrebbe anche essere possibile, fondamentalmente dove negozio e cliente comunicano con gli eventi. Quindi, ad esempio, quando si crea un cliente, viene trasmesso un evento, si acquista ascoltando quell'evento e si aggiunge un cliente a se stesso.
Quali sono le tue opinioni, pro / contro riguardo a questi approcci? Sto usando JavaScript come lingua. Grazie in anticipo per il tuo supporto.
// 01 approch
var shop = {
customers: [],
addCustomer: function (customer) {
this.customers.push(customer);
},
close: function () {
this.customers.forEach(function (customer) {
customer.goOut();
});
}
};
function Customer(name) {
this.name = name;
this.goOut = function () {
console.log(this.name + ' goes out')
}
}
// set up
shop.addCustomer(new Customer('a'));
shop.addCustomer(new Customer('b'));
shop.addCustomer(new Customer('c'));
shop.close();
console.log('-------------------------');
// 02 approch
var shop2 = {
customers: [],
addCustomer: function (customer) {
this.customers.push(customer);
},
close: function () {
this.customers.forEach(function (customer) {
customer.goOut();
});
this.customers = [];
}
};
function Customer2(name) {
this.shop = shop2;
this.name = name;
this.goOut = function () {
console.log(this.name + ' goes out')
}
this.shop.addCustomer(this); // make sense?
}
new Customer2('d');
new Customer2('e');
new Customer2('f');
shop2.close();