Modello di progettazione software per il metodo di classe che deve essere chiamato una sola volta

2

Supponiamo di avere una classe TypeScript:

export class TypeCreator {

  entities: Set<Whatever>

  registerEntities(e: Set<Whatever>): Set<Whatever>{
    return this.entities = e;
  }
}

se registerEntities() dovrebbe essere chiamato una sola volta, dovrei lanciare un errore se lo chiamano due volte, o semplicemente sovrascrivere il valore, o è un odore di codice che può essere gestito in un modo diverso, forse con uno schema meno statico ?

    
posta MrCholo 27.11.2018 - 22:15
fonte

5 risposte

10

In casi come questo, cerco di essere più preciso nel nominare i metodi.

  • setFoo () imposta, ma può essere chiamato più volte.
  • addFoo () si aggiunge ai dati esistenti. (Per me, il tuo "registro" si adatta qui.)
  • putFoo () è una convenzione Java, che significa "aggiungi ma non duplicare se è già presente".
  • initFoo () imposta ma dovrebbe essere chiamato una sola volta. Se chiamato due volte, può restituire uno stato di errore o generare un'eccezione.
risposta data 27.11.2018 - 23:54
fonte
8

Disclaimer: questa raccomandazione proviene da uno sfondo Java, quindi non so se si adatta anche al mondo TypeScript:

Puoi rendere il TypeCreator immutabile, eliminando il metodo registerEntities() e introducendo solo un costruttore che accetta le entità al momento della creazione dell'oggetto.

Questo non solo rende impossibile impostare le entità più volte, ma evita anche lo stato dell'oggetto inutile tra la creazione e l'essere popolato con entità: non appena hai un oggetto TypeCreator , è completamente inizializzato e pronto per l'uso .

    
risposta data 28.11.2018 - 19:58
fonte
0

Un modo per risolvere questo problema è utilizzare una mappa:

export class TypeCreator {

  entitiesMap: Map<string,Set<Whatever>>

  registerEntities(namespace: string, e: Set<Whatever>): Set<Whatever>{
    this.entitiesMap.set(namespace,e);
    return e;
  }
}

ma ciò richiede che qualcuno fornisca una chiave / spazio dei nomi per recuperare quel valore.

    
risposta data 27.11.2018 - 22:21
fonte
0

Potresti essere alla ricerca di un Singleton. È un modello di progettazione molto comune. Non ho mai usato TypeScript, quindi ho trovato un collegamento che mostra come creare un Singleton in TS.

link

Un Singleton garantisce che vi sia una sola istanza.

    
risposta data 29.11.2018 - 05:19
fonte
0

È un metodo che deve anche essere chiamato? Se è così allora suggerisco che il codice e i parametri appartengono al costruttore. I metodi iniziali sono un odore di codice. (Diverso dai metodi di fabbrica che sono statici e restituiscono un'istanza configurata). I costruttori sono forse esattamente ciò che stai cercando: una sezione di codice che viene eseguita una volta e che genera un'istanza configurata pronta per l'uso.

    
risposta data 29.11.2018 - 08:27
fonte