Esto realmente depende. Si los valores con los que operan sus ayudantes son primitivos, entonces los métodos estáticos son una buena opción, como señaló Péter.
Si ellos son complejos y, a continuación SÓLIDO aplica, más concretamente, el S , el I y el 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
un método estático, que se llevará en 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 es necesario conocer las complejidades de las reglas de distribución de cookies. Solo debe ser ahora un objeto, que implementa una regla. La implementación se abstrae en un objeto, cuya única responsabilidad es aplicar la regla. Este objeto se puede probar de forma aislada. OurHouse
se puede probar con el uso de un simple simulacro de CookieDistributor
. Y puede decidir fácilmente cambiar las reglas de distribución de cookies.
Sin embargo, tenga cuidado 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 solo puede tener una responsabilidad, sino que una sola clase debe llevar a cabo una sola responsabilidad.
En el caso de las primitivas u objetos que usa como primitivas (por ejemplo, objetos que representan puntos en el espacio, matrices o algo), las clases auxiliares estáticas 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 Point
tener un add
método. De nuevo, no exagere.
Entonces, dependiendo de su problema, hay diferentes maneras de solucionarlo.