Ottenere una risorsa esistente in un'API del server OOP

0

Sfondo

Ho progettato e implementato un'app server - un'API REST stateless che si occupa principalmente delle operazioni CRUD dei clienti.

Come è ora il server è progettato per utilizzare i moduli per ogni funzionalità invece dei concetti OOP - sebbene i 2 condividano alcune analogie AFAIK.

Come esercizio, sto cercando di modellare alcuni aspetti in OOP.

La creazione di un nuovo oggetto è immediata.

Naturalmente mi aspetterei che la creazione di un nuovo cliente sia semplicemente un'istanza di un nuovo oggetto.

Ad esempio:

// CREATE NEW
// User wants to Insert a new customer.
var customer = new Customer({ 
  name: "John Doe";
});

return "Saved Customer";

Che ne dici di ottenere uno esistente?

Che cosa è considerato un modello ragionevole se invece voglio ottenere un esistente già salvato in DB?

Ad esempio, si tratta di un'API ragionevole?

// GET EXISTING
// User wants to get existing customer from DB
var customer = new Customer().fromDB({ id: 1 });

return customer;

Note

  • Non sto utilizzando un ORM .
  • Anche se probabilmente irrilevante, l'app è scritta sopra Node.js
posta Nik Kyriakides 30.04.2017 - 05:00
fonte

2 risposte

3

No, non va bene. Un cliente non ha nulla a che fare con il modo in cui è stato salvato. Potresti salvare il cliente in un file sql db o in un file flat, non cambierebbe qualcos'altro di cui è responsabile il cliente, corretto? Pertanto, il cliente non deve sapere nulla su come viene salvato.

Prova invece:

// GET EXISTING
// User wants to get existing customer from DB
var repo = new CustomerRepository("dbConnectionString");
var customer = repo.getCustomer({ id: 1 });
return customer;
    
risposta data 30.04.2017 - 06:08
fonte
0

Cerca nella cache. Il modo in cui questo viene generalmente fatto in java consiste nell'utilizzare AOP per intercettare metodi che creano risorse e memorizzarli nella cache (usando ehcache, redis, memcached ecc.) L'uso di un database relazionale come cache è lento. Considera anche orm / oxm.

    
risposta data 02.05.2017 - 03:04
fonte

Leggi altre domande sui tag