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 makeEveryBodyAsHappyAsPossible
un 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 OurHouse
non è 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. OurHouse
può 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 Point
avere un add
metodo. Ancora una volta, non esagerare.
Quindi, a seconda del tuo problema, ci sono diversi modi per risolverlo.