Nome del pattern (anti?): classe helper per implementare la funzione libera

1

Supponiamo di avere una funzione dichiarata pubblicamente

Result ComputeResult(Foo foo);

la cui implementazione è complessa e richiede alcune strutture dati temporanee. Potrei suddividere l'implementazione in passaggi per migliorare la comprensione:

Result ComputeResult(Foo foo) {
  Result result;
  std::map<Bar, Baz> bar_to_baz;
  std::vector<Baz> extra_bazzes;
  GroupByBar(foo, &bar_to_baz, &extra_bazzes);
  AppendExtraBazzes(extra_bazzes, &bar_to_baz);
  ModifyBazzes(&bar_to_baz);
  // etc
  PopulateResult(bar_to_baz, &result);
  return result;
}

Il passaggio delle strutture temporanee può risultare complicato, specialmente se le chiamate sono nidificate; un parametro può essere indirettamente rilevante solo per la chiamata di livello superiore. In alcuni casi trovo più leggibile definire una classe helper per tenerli, istanziati una volta per invocazione funzione:

class ResultComputer {
 public:
  ResultComputer(Foo foo) : foo_(foo) {}
  Result Compute() {
    GroupByBar();
    AppendExtraBazzes();
    ModifyBazzes();
    // etc
    PopulateResult();
    return result_;
  }
 private:
  void GroupByBar();
  void AppendExtraBazzes();
  void ModifyBazzes();
  void PopulateResult();

  Foo foo_;
  Result result_;
  std::map<Bar, Baz> bar_to_baz_;
  std::vector<Baz> extra_bazzes_;
};

Result ComputeResult(Foo foo) {
  return ResultComputer(foo).Compute();
}

Ricordo vagamente qualche consiglio su questo ma non riesco a trovarlo - non so cosa cercare. Questo modello ha un nome?

Nota: non sto chiedendo il valore del modello; questa è una domanda a parte Non sto certamente chiedendo commenti dettagliati sul mio esempio (molto forzato).

    
posta stewbasic 16.07.2018 - 07:14
fonte

1 risposta

0

Oggetto parametro dà un nome al refactoring, che raggruppa più argomenti del metodo e aiuta con la loro propagazione.

Non li chiamo mai come tali però.

    
risposta data 16.07.2018 - 21:23
fonte

Leggi altre domande sui tag