การเขียนคำนามคำกริยาคำคุณศัพท์เป็นวิธีการที่ยอดเยี่ยม แต่ฉันชอบคิดถึงการออกแบบชั้นเรียนเพื่อถามคำถามว่าข้อมูลใดควรถูกซ่อนอยู่ ?
ลองนึกภาพคุณมีQueryวัตถุและDatabaseวัตถุ:
Queryวัตถุจะช่วยให้คุณสร้างและเก็บแบบสอบถาม - เก็บเป็นกุญแจสำคัญที่นี่เป็นฟังก์ชั่นสามารถช่วยให้คุณสร้างได้อย่างง่ายดายเพียง บางทีคุณอาจจะอยู่Query().select('Country').from_table('User').where('Country == "Brazil"')ต่อไป. มันไม่สำคัญว่าไวยากรณ์ - นั่นคืองานของคุณ! - ที่สำคัญคือวัตถุจะช่วยให้คุณซ่อนบางสิ่งบางอย่างในกรณีนี้ข้อมูลที่จำเป็นในการจัดเก็บและส่งออกแบบสอบถาม พลังของวัตถุมาจากไวยากรณ์ของการใช้มัน (ในกรณีนี้มีการผูกมัดที่ฉลาด) และไม่จำเป็นต้องรู้ว่ามันเก็บไว้เพื่อให้มันทำงาน หากทำถูกต้องQueryวัตถุสามารถส่งออกแบบสอบถามได้มากกว่าหนึ่งฐานข้อมูล ภายในจะเก็บรูปแบบเฉพาะ แต่สามารถแปลงเป็นรูปแบบอื่นได้อย่างง่ายดายเมื่อแสดงผล (Postgres, MySQL, MongoDB)
ทีนี้ลองคิดถึงDatabaseวัตถุ สิ่งนี้ซ่อนและจัดเก็บอะไร เห็นได้ชัดว่ามันไม่สามารถจัดเก็บเนื้อหาทั้งหมดของฐานข้อมูลเนื่องจากเป็นเหตุผลที่เรามีฐานข้อมูล! ดังนั้นประเด็นคืออะไร? เป้าหมายคือเพื่อซ่อนวิธีการทำงานของฐานข้อมูลจากผู้ที่ใช้Databaseวัตถุ คลาสที่ดีจะทำให้การใช้เหตุผลง่ายขึ้นเมื่อจัดการกับสถานะภายใน สำหรับDatabaseวัตถุนี้คุณสามารถซ่อนวิธีการทำงานของเครือข่ายการโทรหรือแบบสอบถามหรือการปรับปรุงแบบชุด
ปัญหาคือDatabaseวัตถุนี้มีขนาดใหญ่มาก มันแสดงให้เห็นถึงวิธีการเข้าถึงฐานข้อมูลดังนั้นภายใต้ครอบคลุมมันสามารถทำอะไรและทุกอย่าง การเชื่อมต่อเครือข่ายแคชและการแบทช์ค่อนข้างชัดเจนยากที่จะจัดการขึ้นอยู่กับระบบของคุณดังนั้นการซ่อนมันไว้จะมีประโยชน์มาก แต่ตามที่หลาย ๆ คนจะทราบว่าฐานข้อมูลมีความซับซ้อนอย่างบ้าคลั่งและยิ่งไปกว่านั้นจากฐานข้อมูลดิบที่คุณเรียกคุณจะได้รับสิ่งที่ยากกว่าคือการปรับแต่งเพื่อประสิทธิภาพและเข้าใจว่าสิ่งต่าง ๆ ทำงานอย่างไร
นี่คือการแลกเปลี่ยนขั้นพื้นฐานของ OOP หากคุณเลือกนามธรรมที่ถูกต้องมันจะทำให้การเขียนโค้ดง่ายขึ้น (String, Array, Dictionary) ถ้าคุณเลือกนามธรรมที่มีขนาดใหญ่เกินไป (ฐานข้อมูล EmailManager, NetworkingManager) มันอาจซับซ้อนเกินกว่าที่จะเข้าใจว่ามันทำงานอย่างไร คาดหวัง เป้าหมายคือการซ่อนความซับซ้อนแต่จำเป็นต้องมีความซับซ้อนบางอย่าง กฎง่ายๆคือเริ่มจากการหลีกเลี่ยงManagerวัตถุและสร้างคลาสที่เหมือนกันstructs- ทั้งหมดที่พวกเขาทำคือเก็บข้อมูลด้วยวิธีการช่วยเหลือในการสร้าง / จัดการข้อมูลเพื่อทำให้ชีวิตของคุณง่ายขึ้น ตัวอย่างเช่นในกรณีที่EmailManagerเริ่มต้นด้วยฟังก์ชั่นที่เรียกsendEmailว่าใช้Emailวัตถุ นี่เป็นจุดเริ่มต้นที่ง่ายและรหัสนั้นง่ายต่อการเข้าใจ
สำหรับตัวอย่างของคุณให้คิดถึงว่าข้อมูลใดที่จะต้องอยู่ด้วยกันเพื่อคำนวณสิ่งที่คุณกำลังมองหา หากคุณต้องการทราบว่าสัตว์เดินไปได้ไกลแค่ไหนคุณสามารถมีคลาสAnimalStepและAnimalTrip(คอลเลกชันของ AnimalSteps) ได้ ตอนนี้การเดินทางแต่ละครั้งมีข้อมูลขั้นตอนทั้งหมดแล้วก็ควรจะสามารถหาข้อมูลเกี่ยวกับมันAnimalTrip.calculateDistance()ได้