Questa è una domanda di progettazione relativa alla scoperta di un buon modello di progettazione OO o di una struttura di progettazione o combinazione di classi in grado di ospitare un algoritmo che elabora la selezione dell'utente per produrre raccomandazioni sui prodotti.
Scenario
L'utente specifica i requisiti del motore e del prodotto e gli hit Submit. L'algoritmo elabora l'input, carica vari motori e prodotti, seleziona motori e prodotti pertinenti secondo le specifiche. Quindi li combina, calcola vari parametri delle combo e rileva anche eventuali discrepanze. Quindi fornisce un'uscita sotto forma di valide combinazioni prodotto-motore con specifiche calcolate e anche eventuali discrepanze annotate come avvertenze.
Domanda
Posso avere un oggetto chiamato Algorithm
, che è essenzialmente un insieme di metodi che carica Prodotti, Motori, li combina, esegue calcoli su di essi, imposta varie bandiere, ecc.? O c'è un design migliore?
Design corrente
Il mio attuale design proveniva da un background procedurale ed era usato solo per una serie di funzioni, ora ospitate in un paio di classi. L'algoritmo semplificato è qualcosa del genere (dove Algorithm
è un insieme di metodi correlati alla guida dell'algoritmo e BundleOfComputationalMethods
che si concentra sulle esigenze di calcolo):
class Algorithm
{
public $bundle;
function __construct()
{
$this->bundle = new BundleOfComputationalMethods();
}
function getRequestDataFromPOST()
{
$this->bundle->options = $_POST;
}
function loadMotors(){}
function loadProducts(){}
function combineProductsAndMotors()
{
$this->getRequestDataFromPOST();
$this->loadMotors();
$this->loadProducts();
for ($k = 1; $k <= $this->bundle->spec->max; $k++)
{
$this->bundle->computeRotationalSpeed();
$this->bundle->checkIfSpeedWithinLimits();
if ($this->bundle->speedIsOkay)
{
//bundle contains a "selection" to be presented back to the user
//(Motor, Product, computed specifications, pricing, any warnings/errors)
$result .= json_encode($this->bundle);
}
}
return $result;
}
}