Esto realmente depende. Si los valores en los que operan tus ayudantes son primitivos, entonces los métodos estáticos son una buena opción, como señala Péter.
Si son complejos, se aplica SOLID , más específicamente el S , I y la < a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle"> D .
Ejemplo:
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();
}
}
Esto sería sobre tu problema. Usted puede hacer que makeEveryBodyAsHappyAsPossible
sea un método estático, que incorporará los parámetros necesarios. Otra opción es:
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]);
}
}
Ahora OurHouse
no necesita conocer las complejidades de las reglas de distribución de cookies. Sólo debe ahora un objeto, que implementa una regla. La implementación se abstrae en un objeto, cuya única responsabilidad es aplicar la regla. Este objeto puede ser probado de forma aislada. OurHouse
se puede probar usando una mera simulación del CookieDistributor
. Y puede decidir fácilmente cambiar las reglas de distribución de cookies.
Sin embargo, cuídate de no exagerar. Por ejemplo, tener un sistema complejo de 30 clases actúa como la implementación de CookieDistributor
, donde cada clase simplemente cumple una pequeña tarea, realmente no tiene sentido. Mi interpretación del SRP es que no solo dicta que cada clase puede tener solo una responsabilidad, sino que una sola clase debe realizar una sola responsabilidad.
En el caso de primitivos u objetos que usa como primitivos (por ejemplo, objetos que representan puntos en el espacio, matrices o algo así), las clases de ayuda estática tienen mucho sentido. Si tiene la opción, y realmente tiene sentido, entonces podría considerar agregar un método a la clase que representa los datos, por ejemplo. es sensato que un Point
tenga un método add
. De nuevo, no te excedas.
Entonces, dependiendo de tu problema, hay diferentes maneras de hacerlo.