คุณไม่สามารถเขียนรหัสที่ดีได้หากไม่มีผู้เรียก
เหตุผลที่ไม่เป็นเช่นนี้เพราะผู้ได้รับไม่ทำลายห่อหุ้มพวกเขาทำ ไม่ใช่เพราะผู้ได้รับการล่อลวงไม่ให้ผู้คนสนใจที่จะไม่ติดตาม OOP ซึ่งจะทำให้พวกเขาใช้วิธีการกับข้อมูลที่พวกเขาทำ พวกเขาทำ. ไม่คุณต้องได้รับผู้ให้บริการเนื่องจากขอบเขต
แนวคิดของการห่อหุ้มและการเก็บรักษาวิธีการพร้อมกับข้อมูลที่พวกเขาทำก็ไม่ได้ผลเมื่อคุณวิ่งเข้าไปในขอบเขตที่ทำให้คุณไม่สามารถย้ายวิธีการและบังคับให้คุณย้ายข้อมูล
มันง่ายจริงๆ หากคุณใช้ getters เมื่อไม่มีขอบเขตคุณจะพบว่าไม่มีวัตถุจริง ทุกอย่างเริ่มมีแนวโน้มที่จะเป็นขั้นตอน ซึ่งใช้งานได้ดีเหมือนที่เคยทำมา
True OOP ไม่ใช่สิ่งที่คุณสามารถแพร่กระจายได้ทุกที่ ใช้งานได้ภายในขอบเขตเหล่านั้นเท่านั้น
ขอบเขตเหล่านั้นไม่ได้คมชัด พวกเขามีรหัสในพวกเขา รหัสนั้นไม่สามารถเป็น OOP ได้ มันไม่สามารถใช้งานได้เช่นกัน ไม่มีรหัสนี้ที่มีอุดมการณ์ของเราถูกถอดออกจากมันเพื่อให้สามารถจัดการกับความเป็นจริงที่รุนแรง
Michael Fetters เรียกรหัสนี้ว่าFasciaหลังจากเนื้อเยื่อเกี่ยวพันสีขาวที่ยึดส่วนสีส้มเข้าด้วยกัน
นี่เป็นวิธีที่ยอดเยี่ยมที่จะคิดเกี่ยวกับมัน มันอธิบายว่าทำไมมันโอเคที่จะมีโค้ดทั้งสองชนิดในฐานรหัสเดียวกัน หากไม่มีมุมมองนี้โปรแกรมเมอร์ใหม่หลายคนยึดมั่นในอุดมคติของพวกเขาอย่างหนักจากนั้นทำให้จิตใจของพวกเขาแตกสลายและยอมแพ้ต่ออุดมการณ์เหล่านี้เมื่อพวกเขาไปถึงขอบเขตแรก
อุดมคติทำงานเฉพาะในสถานที่ที่เหมาะสม อย่ายอมแพ้กับพวกเขาเพียงเพราะพวกเขาไม่ได้ทำงานทุกที่ ใช้พวกเขาในที่ทำงาน สถานที่นั้นเป็นส่วนที่ชุ่มฉ่ำที่ Fascia ปกป้อง
ตัวอย่างง่ายๆของขอบเขตคือชุดสะสม สิ่งนี้ถือบางสิ่งและไม่รู้ว่ามันคืออะไร นักออกแบบคอลเลกชันอาจจะย้ายฟังก์ชันการทำงานของวัตถุที่ถูกเก็บไว้ไปที่คอลเลกชันได้อย่างไรเมื่อพวกเขาไม่รู้ว่ากำลังจะถืออะไรอยู่? คุณทำไม่ได้ คุณขึ้นกับขอบเขต ซึ่งเป็นเหตุผลที่คอลเลกชันมี getters
ตอนนี้ถ้าคุณรู้คุณสามารถย้ายพฤติกรรมนั้นและหลีกเลี่ยงการเคลื่อนไหว เมื่อคุณรู้คุณควร คุณแค่ไม่รู้เสมอไป
บางคนเรียกสิ่งนี้ว่า และมันคือ. แต่เป็นเรื่องดีที่รู้ว่าทำไมเราต้องปฏิบัติ
คุณได้แสดงว่าคุณไม่ต้องการได้ยินข้อโต้แย้งทางความหมายและดูเหมือนจะสนับสนุนให้มีการวาง "ผู้ได้รับที่เหมาะสม" ทุกที่ คุณกำลังขอให้แนวคิดนี้ถูกท้าทาย ฉันคิดว่าฉันสามารถแสดงความคิดที่มีปัญหากับวิธีที่คุณกำหนดไว้ แต่มันก็ยังคิดว่าฉันรู้ว่าคุณมาจากไหนเพราะฉันอยู่ที่นั่น
ถ้าคุณต้องการให้ผู้ดูมองไปที่ Python ไม่มีคำหลักส่วนตัว ถึงแม้ว่า Python จะทำ OOP ได้ดี อย่างไร? พวกเขาใช้เคล็ดลับความหมาย พวกเขาตั้งชื่อสิ่งใดก็ตามที่เป็นส่วนตัวกับขีดล่างชั้นนำ คุณยังได้รับอนุญาตให้อ่านจากหนังสือหากคุณต้องรับผิดชอบ "พวกเราทุกคนเป็นผู้ใหญ่ที่นี่" พวกเขามักจะพูดว่า
ดังนั้นความแตกต่างระหว่างสิ่งนั้นและเพียงแค่วาง getters ในทุกสิ่งใน Java หรือ C #? ขออภัย แต่มันมีความหมาย การประชุมที่เน้นการใช้ Pythons ส่งสัญญาณชัดเจนว่าคุณกำลังเดินไปมาด้านหลังพนักงานเพียงประตูเดียว ตบ getters ทุกอย่างและคุณปล่อยสัญญาณนั้น ด้วยการไตร่ตรองคุณสามารถถอดส่วนบุคคลออกไปได้และยังไม่สูญเสียความหมายของสัญญาณ มันไม่มีข้อโต้แย้งเชิงโครงสร้างที่จะทำที่นี่
ดังนั้นสิ่งที่เราเหลือไว้คืองานในการตัดสินใจว่าจะแขวนป้าย "พนักงานเท่านั้น" สิ่งที่ควรพิจารณาเป็นส่วนตัว? คุณเรียกว่า "ผู้ได้รับที่สมเหตุสมผล" ดังที่ฉันได้กล่าวไปแล้วความชอบธรรมที่ดีที่สุดสำหรับผู้ทะเลาะกันคือขอบเขตที่บังคับให้เราอยู่ห่างจากอุดมคติของเรา นั่นไม่ควรส่งผลให้ทุกคนได้รับผลประโยชน์ เมื่อมันส่งผลให้ทะเยอทะยานคุณควรพิจารณาย้ายพฤติกรรมต่อไปในบิตฉ่ำที่คุณสามารถปกป้องมัน
การแยกนี้ทำให้เกิดคำศัพท์สองสามคำ Data Transfer Object หรือ DTO ไม่มีพฤติกรรมใด ๆ วิธีการเพียงอย่างเดียวคือ getters และบางครั้ง setters บางครั้งตัวสร้าง ชื่อนี้โชคไม่ดีเพราะมันไม่ใช่วัตถุจริงเลย getters และ setters เป็นเพียงแค่การแก้ไขจุดบกพร่องของรหัสที่ให้ที่สำหรับวางเบรกพอยต์ หากไม่ใช่เพราะความต้องการนั้นพวกเขาก็จะกลายเป็นกองสาธารณะ ใน C ++ เราเคยเรียกมันว่า structs ความแตกต่างเพียงอย่างเดียวที่พวกเขามีจากคลาส C ++ คือค่าเริ่มต้นเป็นแบบสาธารณะ
DTO นั้นดีเพราะคุณสามารถโยนพวกเขาข้ามกำแพงและรักษาวิธีการอื่น ๆ ของคุณอย่างปลอดภัยในวัตถุพฤติกรรมฉ่ำที่ดี วัตถุจริง ไม่มีทะเยอทะยานที่จะละเมิดมันห่อหุ้ม วัตถุพฤติกรรมของฉันอาจกิน DTO โดยใช้พวกเขาเป็นพารามิเตอร์วัตถุ บางครั้งผมจะต้องทำสำเนาการป้องกันของมันเพื่อป้องกันไม่ให้ใช้ร่วมกันของรัฐที่ไม่แน่นอน ฉันไม่กระจาย DTO ที่ไม่แน่นอนรอบ ๆ ภายในส่วนที่ฉ่ำภายในขอบเขต ฉันแค็ปซูลพวกเขา ฉันซ่อนพวกเขา และในที่สุดเมื่อฉันวิ่งเข้าไปในขอบเขตใหม่ฉันหมุน DTO ใหม่แล้วเหวี่ยงข้ามกำแพงดังนั้นมันจึงเป็นปัญหาของคนอื่น
แต่คุณต้องการให้ผู้ให้บริการที่แสดงตัวตน ขอแสดงความยินดีด้วยที่คุณพบว่ามีขอบเขต เอนทิตีมีเอกลักษณ์ที่เกินกว่าการอ้างอิง นั่นคือเกินกว่าที่อยู่หน่วยความจำของพวกเขา ดังนั้นจะต้องมีการจัดเก็บที่ไหนสักแห่ง และบางสิ่งบางอย่างจะต้องสามารถอ้างถึงสิ่งนี้ด้วยตัวตนของมัน ทะเยอทะยานที่แสดงตัวตนมีความสมเหตุสมผล กองรหัสที่ใช้ผู้ทะเยอทะยานในการตัดสินใจว่า Entity อาจทำให้ตัวเองไม่ได้
ในท้ายที่สุดมันก็ไม่ได้มีอยู่ของผู้ได้รับที่ผิด พวกเขาดีกว่าทุ่งสาธารณะ สิ่งที่ไม่ดีคือเมื่อพวกเขาคุ้นเคยว่าคุณเป็น Object Oriented เมื่อคุณไม่ได้ Getters เป็นสิ่งที่ดี การเป็น Object Oriented นั้นดี Getters ไม่ใช่ Object Oriented ใช้ getters เพื่อแกะสลักสถานที่ที่ปลอดภัยให้เป็น Object Oriented