สิ่งนี้ขึ้นอยู่กับ หากค่าที่ผู้ช่วยของคุณดำเนินการเป็นสิ่งพื้นฐานวิธีการคงที่เป็นตัวเลือกที่ดีตามที่Péterชี้ให้เห็น
หากพวกเขามีความซับซ้อนแล้วSOLIDใช้มากขึ้นโดยเฉพาะSที่ผมและ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 ของฉันคือว่าไม่เพียง แต่กำหนดว่าแต่ละชั้นอาจมีความรับผิดชอบเพียงอย่างเดียว แต่ยังรวมถึงความรับผิดชอบเดียวที่ควรดำเนินการโดยชั้นเดียว
ในกรณีของวัตถุพื้นฐานหรือวัตถุที่คุณใช้เช่นวัตถุพื้นฐาน (ตัวอย่างเช่นวัตถุที่แสดงถึงจุดในอวกาศเมทริกซ์หรือบางอย่าง) คลาสตัวช่วยแบบคงที่ทำให้รู้สึกมาก ถ้าคุณมีทางเลือกและมันสมเหตุสมผลจริง ๆ แล้วคุณอาจลองเพิ่มวิธีในคลาสที่แทนข้อมูลเช่นมีเหตุผลที่ a Point
มีadd
วิธี อย่าหักโหมจนเกินไป
ดังนั้นขึ้นอยู่กับปัญหาของคุณมีหลายวิธีที่จะไปเกี่ยวกับเรื่องนี้