การเขียนคำนามคำกริยาคำคุณศัพท์เป็นวิธีการที่ยอดเยี่ยม แต่ฉันชอบคิดถึงการออกแบบชั้นเรียนเพื่อถามคำถามว่าข้อมูลใดควรถูกซ่อนอยู่ ?
ลองนึกภาพคุณมี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()
ได้