Questo dipende davvero. Se i valori su cui operano i tuoi aiutanti sono primitivi, allora i metodi statici sono una buona scelta, come ha sottolineato Péter.
Se complessa, quindi SOLIDO applica, più specificamente la S , la I e D .
Esempio:
class CookieJar {
function takeCookies(count:Int):Array<Cookie> { ... }
function countCookies():Int { ... }
function ressuplyCookies(cookies:Array<Cookie>
... // lot of stuff we don't care about now
}
class CookieFan {
function getHunger():Float;
function eatCookies(cookies:Array<Cookie>):Smile { ... }
}
class OurHouse {
var jake:CookieFan;
var jane:CookieFan;
var cookies:CookieJar;
function makeEveryBodyAsHappyAsPossible():Void {
//perform a lot of operations on jake, jane and the cookies
}
public function cookieTime():Void {
makeEveryBodyAsHappyAsPossible();
}
}
Questo riguarderebbe il tuo problema. È possibile effettuare makeEveryBodyAsHappyAsPossibleun metodo statico, che si terrà nei parametri necessari. Un'altra opzione è:
interface CookieDistributor {
function distributeCookies(to:Array<CookieFan>):Array<Smile>;
}
class HappynessMaximizingDistributor implements CookieDistributor {
var jar:CookieJar;
function distributeCookies(to:Array<CookieFan>):Array<Smile> {
//put the logic of makeEveryBodyAsHappyAsPossible here
}
}
//and make a change here
class OurHouse {
var jake:CookieFan;
var jane:CookieFan;
var cookies:CookieDistributor;
public function cookieTime():Void {
cookies.distributeCookies([jake, jane]);
}
}
Ora OurHousenon è necessario conoscere la complessità delle regole di distribuzione dei cookie. Deve solo ora un oggetto, che implementa una regola. L'implementazione viene sottratta a un oggetto, la cui unica responsabilità è applicare la regola. Questo oggetto può essere testato in isolamento. OurHousepuò essere testato con un semplice mocking di CookieDistributor. E puoi facilmente decidere di modificare le regole di distribuzione dei cookie.
Tuttavia, fai attenzione a non esagerare. Ad esempio avere un sistema complesso di 30 classi funge da implementazione CookieDistributor, in cui ogni classe svolge semplicemente un piccolo compito, non ha davvero senso. La mia interpretazione dell'SRP è che non solo impone che ogni classe possa avere una sola responsabilità, ma anche che una singola responsabilità dovrebbe essere svolta da una singola classe.
Nel caso di primitivi o oggetti che usi come primitivi (ad esempio oggetti che rappresentano punti nello spazio, matrici o altro), le classi di supporto statiche hanno molto senso. Se hai la scelta, e ha davvero senso, allora potresti effettivamente prendere in considerazione l'aggiunta di un metodo alla classe che rappresenta i dati, ad esempio è ragionevole per un Pointavere un addmetodo. Ancora una volta, non esagerare.
Quindi, a seconda del tuo problema, ci sono diversi modi per risolverlo.