Bu gerçekten bağlıdır. Yardımcılarınızın çalıştığı değerler ilkel ise, Péter'in belirttiği gibi statik yöntemler iyi bir seçimdir.
Eğer karmaşıklarsa, SOLID , daha spesifik olarak S , I ve D'yi uygular .
Örnek:
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();
}
}
Bu senin sorununla ilgili olurdu. Sen edebilirsiniz yapmak makeEveryBodyAsHappyAsPossible
gerekli parametreleri alacak statik bir yöntem. Başka bir seçenek:
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]);
}
}
Artık OurHouse
çerez dağıtım kurallarının inceliklerini öğrenmenize gerek yok. Sadece şimdi bir kural uygulayan bir nesne olmalıdır. Uygulama tek bir nesneye soyutlanır, tek sorumluluğu kuralı uygulamaktır. Bu nesne izolasyonla test edilebilir. OurHouse
sadece bir alay kullanılarak test edilebilir CookieDistributor
. Çerez dağıtım kurallarını kolayca değiştirmeye karar verebilirsiniz.
Ancak, aşırıya kaçmamaya dikkat edin. Örneğin, 30 sınıftan oluşan karmaşık bir sisteme sahip olmak CookieDistributor
, her bir sınıfın sadece küçük bir görevi yerine getirdiği yerin uygulanması olarak işlev görür . SRP hakkındaki yorumum, her bir sınıfın sadece bir sorumluluğa sahip olabileceğini değil, aynı zamanda tek bir sorumluluğun tek bir sınıf tarafından yerine getirilmesi gerektiğini belirlemesidir.
İlkel ya da ilkel (örneğin uzayda noktaları temsil eden nesneler, matrisler ya da bir şeyleri temsil eden nesneler) gibi kullandığınız nesneler durumunda, statik yardımcı sınıflar büyük bir anlam ifade eder. Seçeneğiniz varsa ve gerçekten mantıklıysa, o zaman aslında verileri temsil eden sınıfa bir yöntem eklemeyi düşünebilirsiniz, örneğin Point
bir add
yöntemin olması mantıklıdır . Yine, fazla abartma.
Bu yüzden, probleminize bağlı olarak, bununla başa çıkmanın farklı yolları var.