이것은 실제로 달려 있습니다. 도우미가 작동하는 값이 기본 인 경우 Péter가 지적한 것처럼 정적 메서드를 사용하는 것이 좋습니다.
복잡한 경우 SOLID , 특히 S , I 및 D가 적용 됩니다.
예:
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();
}
}
이것은 당신의 문제에 관한 것입니다. 필요한 매개 변수를 사용 하는 정적 메서드를 만들 수 있습니다makeEveryBodyAsHappyAsPossible
. 다른 옵션은 다음과 같습니다.
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]);
}
}
이제 OurHouse
쿠키 배포 규칙의 복잡성에 대해 알 필요가 없습니다. 이제 규칙을 구현하는 객체 만 있어야합니다. 구현은 객체로 추상화되어 있으며, 그 책임은 전적으로 규칙을 적용하는 것입니다. 이 개체는 별도로 테스트 할 수 있습니다. OurHouse
의 단순한 모의를 사용하여 테스트 할 수 있습니다 CookieDistributor
. 쿠키 배포 규칙을 쉽게 변경할 수 있습니다.
그러나 과도하게 사용하지 않도록주의하십시오. 예를 들어 30 개의 클래스로 구성된 복잡한 시스템의 구현은 CookieDistributor
각 클래스가 작은 작업을 수행하는 것만으로도 의미가 없습니다. SRP에 대한 나의 해석은 각 클래스가 하나의 책임을 가질 수 있다고 지시 할뿐만 아니라 단일 클래스가 단일 책임을 수행해야한다는 것입니다.
프리미티브 또는 프리미티브처럼 사용하는 객체 (예 : 공간, 행렬 또는 무언가의 점을 나타내는 객체)의 경우 정적 도우미 클래스는 의미가 있습니다. 선택의 여지가 있고 실제로 이해가된다면 실제로 데이터를 나타내는 클래스에 메소드를 추가하는 것을 고려할 수 있습니다. 예를 들어 메소드 Point
를 갖는 것이 합리적입니다 add
. 다시, 그것을 과장하지 마십시오.
따라서 문제에 따라 여러 가지 방법이 있습니다.