ในการทำให้โค้ดของคุณมีการรวมตัวกันอย่างหลวม ๆ นี่เป็นสิ่งง่าย ๆ ที่ควรจดจำ:
ส่วนที่ 1:
ในทางเทคนิครู้จักกันในชื่อ "การแยกความกังวล" แต่ละคลาสมีบทบาทเฉพาะควรจัดการกับตรรกะทางธุรกิจหรือตรรกะของแอปพลิเคชัน ลองและหลีกเลี่ยงการเรียนที่รวมความรับผิดชอบทั้งสอง นั่นคือคลาสที่จัดการข้อมูล (คำกว้าง) คือตรรกะของแอปพลิเคชันในขณะที่คลาสที่ใช้ข้อมูลนั้นเป็นตรรกะทางธุรกิจ
ส่วนตัวผมอ้างถึงนี้ (ในโลกเล็ก ๆ น้อย ๆ ของตัวเอง) create it or use it
ในฐานะ คลาสควรสร้างวัตถุหรือใช้วัตถุที่ไม่ควรทำทั้งสองอย่าง
ส่วนที่ 2:
วิธีการแยกความกังวลออก
ในฐานะที่เป็นจุดเริ่มต้นมีสองเทคนิคง่าย ๆ :
หมายเหตุ: รูปแบบการออกแบบไม่สมบูรณ์
พวกเขาควรจะปรับแต่งให้เข้ากับสถานการณ์ แต่มีธีมพื้นฐานที่คล้ายกับแอปพลิเคชันทั้งหมด ดังนั้นอย่าดูตัวอย่างด้านล่างและพูดว่าฉันต้องทำตามนี้อย่างเหนียวแน่น นี่เป็นเพียงตัวอย่าง (และประดิษฐ์ขึ้นเล็กน้อย)
ฉีดพึ่งพา :
นี่คือที่ที่คุณผ่านในวัตถุที่คลาสใช้ วัตถุที่คุณส่งผ่านตามอินเทอร์เฟซเพื่อให้ชั้นเรียนของคุณรู้ว่าจะทำอย่างไรกับมัน แต่ไม่จำเป็นต้องรู้การใช้งานจริง
class Tokenizer
{
public:
Tokenizer(std::istream& s)
: stream(s)
{}
std::string nextToken() { std::string token; stream >> token;return token;}
private:
std::istream& stream;
};
ที่นี่เราส่งกระแสข้อมูลไปยัง Tokenizer tokenizer ไม่ทราบประเภทของกระแสข้อมูลตราบใดที่ใช้อินเทอร์เฟซของ std :: istream
รูปแบบตัวค้นหาบริการ :
รูปแบบที่ตั้งบริการเป็นรูปแบบที่แตกต่างกันเล็กน้อยในการฉีดพึ่งพา แทนที่จะให้วัตถุที่สามารถใช้งานได้คุณส่งผ่านวัตถุที่รู้วิธีค้นหา (สร้าง) วัตถุที่คุณต้องการใช้
class Application
{
public:
Application(Persister& p)
: persistor(p)
{}
void save()
{
std::auto_ptr<SaveDialog> saveDialog = persistor.getSaveDialog();
saveDialog.DoSaveAction();
}
void load()
{
std::auto_ptr<LoadDialog> loadDialog = persistor.getLoadDialog();
loadDialog.DoLoadAction();
}
private:
Persister& persistor;
};
ที่นี่เราผ่านการประยุกต์ใช้วัตถุวัตถุวัตถุ เมื่อคุณทำการบันทึก / โหลดจะใช้ persistor เพื่อสร้างวัตถุที่รู้วิธีการทำจริง หมายเหตุ: persistor เป็นอินเทอร์เฟซอีกครั้งและคุณสามารถให้การใช้งานที่แตกต่างกันขึ้นอยู่กับสถานการณ์
สิ่งนี้มีประโยชน์เมื่อต้องการpotentially
วัตถุที่ไม่ซ้ำกันในแต่ละครั้งที่คุณสร้างอินสแตนซ์ของการกระทำ
โดยส่วนตัวแล้วฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่งในการเขียนการทดสอบหน่วย
หมายเหตุของรูปแบบ:
รูปแบบการออกแบบเป็นเรื่องใหญ่แก่ตัวเอง นี่ไม่ใช่รายการรูปแบบพิเศษที่คุณสามารถใช้เพื่อช่วยในการคลัปหลวม ๆ นี่เป็นเพียงจุดเริ่มต้นทั่วไป
ด้วยประสบการณ์คุณจะรู้ว่าคุณใช้รูปแบบเหล่านี้อยู่แล้วซึ่งคุณไม่ได้ใช้ชื่อทางการของพวกเขา ด้วยการทำให้ชื่อของพวกเขาเป็นมาตรฐาน (และทำให้ทุกคนเรียนรู้พวกเขา) เราพบว่ามันเป็นเรื่องง่ายและรวดเร็วในการสื่อสารความคิด