มันถือว่าเป็นแนวปฏิบัติที่ไม่ดีในการเพิ่มตรรกะใน setter คุณสมบัติหรือไม่?


28

ฉันเพิ่มเข้าไปในโครงการและเห็นว่าผู้พัฒนารายอื่นกำลังเพิ่มตรรกะจำนวนมากใน setters ของคุณสมบัติที่สังเคราะห์ ฉันเข้าใจว่ามันใช้งานได้อย่างไร แต่ฉันคิดว่ามันยากที่จะเข้าใจการไหลของโปรแกรม ในขณะที่อ่านรหัสเมื่อใดก็ตามที่ฉันเห็นself.something = whateverฉันมักจะตรวจสอบว่าsomethingsetter ของถูกแทนที่

ความคิดเห็นของคุณเกี่ยวกับหัวข้อนี้คืออะไร? คุณคิดว่านี่เป็นสัญลักษณ์ของสถาปัตยกรรมที่ไม่ดีหรือวิธีการแก้ปัญหาที่ซับซ้อนหรือไม่?

ฉันยินดีที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ถ้าคุณมีลิงค์ / แหล่งข้อมูลที่เกี่ยวข้องมันยากเกินไปที่จะรับผลลัพธ์ google ที่ดีดังนั้นฉันจึงตัดสินใจถามที่นี่เช่นกัน

ขอบคุณสำหรับคำตอบใด ๆ และโปรดทราบว่าฉันกำลังพูดถึงวัตถุประสงค์ C ในกรณีที่คุณไม่ได้เห็นแท็ก (แม้ว่านี่จะไม่เป็นปัญหาเฉพาะภาษาที่ฉันเดา)


5
ตรรกะประเภทใด ไม่มีอะไรผิดปกติในการวางตรรกะการตรวจสอบเช่น ในทางกลับกันผู้ตั้งค่าที่ส่งเหตุการณ์บางอย่างให้บริการเว็บและอัปเดต UI นั้นผิดทั้งหมด
Arseni Mourzenko

@MainMa ฉันยอมรับว่าการตรวจสอบความถูกต้อง - อาจเพิ่มผู้สังเกตการณ์บางคนด้วยใช่ไหม คุณอาจยกตัวอย่างบางอย่างเกี่ยวกับสิ่งที่คุณคิดว่าเหมาะสมกว่าที่จะนำไปเป็นเซทเทอร์?
phi

แท้จริงแล้วผู้สังเกตการณ์นั้นถูกต้อง สำหรับสิ่งที่เหมาะสมสำหรับผู้ตั้งค่าฉันให้นักพัฒนาที่มีประสบการณ์มากขึ้นตอบคำถามนี้
Arseni Mourzenko

คำตอบ:


44

มันถือว่าเป็นแนวปฏิบัติที่ไม่ดีในการเพิ่มตรรกะใน setter คุณสมบัติหรือไม่?

ไม่

คุณสมบัติถูกคิดค้นเพื่อให้นักออกแบบชั้นเรียนมีตรรกะที่แนบมากับอินเทอร์เฟซที่สะดวกในการเข้าถึงฟิลด์และการกำหนด

เท่าไหร่มากเกินไป? ขึ้นอยู่กับความรับผิดชอบของชั้นเรียน นี่คือบางสิ่งที่เหมาะสมที่จะใส่ใน setter คุณสมบัติ:

  • อัปเดตค่าที่ได้รับบางส่วน
  • แจ้งผู้สังเกตการณ์ว่าสถานะคลาสมีการเปลี่ยนแปลง
  • เผยแพร่การเปลี่ยนแปลงไปยังวัตถุที่มีอยู่
  • เผยแพร่การเปลี่ยนแปลงไปยังที่เก็บข้อมูลสำรอง
  • ทำการตรวจสอบ

การเขียนโปรแกรมทำได้ง่ายขึ้นเมื่อคลาสมีอินเทอร์เฟซที่ทำให้ชัดเจนว่าคลาสสามารถทำอะไรได้โดยไม่ทำให้ผู้โทรคิดว่าจะทำอย่างไร การวางตรรกะไว้ด้านหลังตัวตั้งค่าคุณสมบัติอนุญาตให้คลาสเพื่อซ่อนการนำไปใช้หลังอินเตอร์เฟสแบบง่าย สำหรับบางคลาสไม่มีวิธีการที่จำเป็น เพียงหมุนลูกบิดด้วยการตั้งค่าคุณสมบัติและอ่านเอาต์พุตโดยรับคุณสมบัติ


13
ดำเนินการตรวจสอบ ...
Robert Harvey

วิธีที่ดีในการโหลดมุมมองคอลเลกชันหรือมุมมองในวิธีการแทนที่ setter?
Krishnan

15

โดยทั่วไปแล้ว Setters จะใช้ในการเปลี่ยนสถานะของวัตถุโดยไม่มีผลข้างเคียงที่สำคัญหรือการคำนวณหนักใช้วิธีการและฟังก์ชั่นสำหรับสิ่งนั้น เหตุผลหลักในการดำเนินการตั้งค่าจะมีการเปลี่ยนแปลงและการบำรุงรักษาสถานะที่ถูกต้อง ดังนั้นการ จำกัด ช่วงการตั้งค่าสถานะเพื่อขอการคำนวณใหม่หรือการปรับคุณสมบัติที่เกี่ยวข้องนั้นเป็นเรื่องปกติ


7

ฉันไม่รู้เกี่ยวกับวัตถุประสงค์ C แต่อย่างที่คุณพูดดูเหมือนเป็นคำถามทั่วไปสำหรับภาษา OO ใด ๆ ประการแรกและเกี่ยวข้องกับสิ่งนั้นจริง ๆ ไม่ว่าจะมีตัวตั้งค่าและตัวเริ่มต้นเป็นเรื่องของการอภิปราย (ในบางกรณีการมีอยู่ของพวกเขานั้นเป็นธรรมโดยการใช้เฟรมเวิร์กหรือไลบรารี)

ฉันเชื่อว่าชื่อของวิธีการควรอธิบายวิธีการทำและวิธีการทั้งหมดไม่ นอกจากนี้เอกสารที่เกี่ยวข้องกับวิธีการนั้นควรอธิบายอย่างชัดเจนยิ่งขึ้น ในกรณีนี้ชื่อวิธีการในรูปแบบ "set" + {คำนาม} ไม่ควรมีผลข้างเคียงใด ๆ นอกเหนือจากการตั้งค่าของตัวแปรและนั่นควรจะเป็นการกระทำที่เกี่ยวข้องเท่านั้น การตรวจสอบว่าอาร์กิวเมนต์นั้นถูกต้องเป็นที่ยอมรับ แต่ก็ควรอธิบายไว้ในเอกสารประกอบ


1
+1 สำหรับ "ว่าจะมี setters และ getters หรือไม่" และอีก +1 สำหรับ "ชื่อเมธอดควรอธิบายว่ามันทำอะไร"
aviv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.