यह वास्तव में निर्भर करता है। यदि आपके मददगार जिन मूल्यों पर काम करते हैं, वे आदिम हैं, तो स्थैतिक विधियाँ एक अच्छा विकल्प हैं, जैसा कि Péter ने बताया है।
वे जटिल हैं, तो ठोस लागू होता है, और अधिक विशेष एस , मैं और डी ।
उदाहरण:
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
, जहां प्रत्येक वर्ग केवल एक छोटे से काम को पूरा करता है, वास्तव में कोई मतलब नहीं है। एसआरपी की मेरी व्याख्या यह है कि यह केवल यह निर्धारित नहीं करता है कि प्रत्येक वर्ग के पास केवल एक जिम्मेदारी हो सकती है, बल्कि यह भी है कि एक एकल वर्ग द्वारा एक ही जिम्मेदारी निभाई जानी चाहिए।
प्राइमिटिव्स या ऑब्जेक्ट्स के मामले में आप प्रिमिटिव्स की तरह उपयोग करते हैं (उदाहरण के लिए स्पेस, मैट्रीज या कुछ और में पॉइंट्स का प्रतिनिधित्व करने वाले ऑब्जेक्ट्स), स्टैटिक हेल्पर क्लासेस बहुत मायने रखती हैं। यदि आपके पास विकल्प है, और यह वास्तव में समझ में आता है, तो आप वास्तव में डेटा का प्रतिनिधित्व करने वाले वर्ग के लिए एक विधि जोड़ने पर विचार कर सकते हैं, जैसे कि यह Point
एक add
विधि के लिए समझदार है । फिर से, इसे ज़्यादा मत करो।
तो आपकी समस्या के आधार पर, इसके बारे में जाने के विभिन्न तरीके हैं।