สิ่งที่จะพูดกับเจ้านายของคุณหากพวกเขาต้องการให้คุณใช้ตัวแปรทั่วโลก


13

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

คุณจะจัดการกับสิ่งนี้อย่างไรเนื่องจากฉันเพิ่งเขียนโปรแกรมอย่างมืออาชีพเป็นเวลา 4 เดือน!


4
เจ้านายของคุณเป็นคนช่างหรือคนที่ไม่ใช่ช่างเทคนิค? หากเขาเป็นนักเทคนิคเขาได้อ่าน "Clean Code" โดย Robert C. Martin หรือไม่
George Stocker

5
ดังนั้นหัวหน้าของคุณจ้างให้คุณเขียนโค้ดและตอนนี้กำลังบอกวิธีการเขียนโค้ดให้คุณ?
Jeremy Heiler

8
คุณพูดในความคิดเห็นด้านล่างว่า "วัตถุไม่มีสถานะใด ๆ นอกเหนือจากค่าคงที่จำนวนมาก" ในกรณีนี้คลาสแบบสแตติกดูเหมือนจะเป็นทางออกที่ดีสำหรับฉัน
Justin

5
"ใช่บอส" เป็นสิ่งที่ควรคำนึงถึง ...

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

คำตอบ:


33

หากมีวัตถุหนึ่งชิ้นเพียงพอการสร้างวัตถุทุกครั้งก็เป็นของเสียและที่นี่เจ้านายของคุณอาจถูกต้อง

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


3
+1: เท่าที่ฉันไม่ชอบคำตอบ "GoF พูดอย่างนั้น" ถูกต้อง
Javier

1
ฉันคิดเกี่ยวกับ Singletons แต่ฉันเพิ่งเห็นมันเป็น wrapper รอบตัวแปรทั่วโลกดังนั้นฉันไม่ได้ติดตามมัน ฉันจะลองทำสิ่งนี้ในขณะนี้เนื่องจากวัตถุไม่มีสถานะใด ๆ นอกเหนือจากค่าคงที่จำนวนมากดังนั้นควรปรับ ขอบคุณ
Darren Young

9
ฉันสงสัยว่านี่อาจเป็นกรณี ("วัตถุไม่มีสถานะใด ๆ ... ค่าคงที่จำนวนมาก") เจ้านายของคุณถูกต้อง ไม่มีเหตุผลในการสร้างแรงกดดันให้กับตัวเก็บขยะสำหรับค่าที่ไม่เคยเปลี่ยนแปลง
Berin Loritsch

3
@ darren-young: ในด้านการมีรัฐไม่น่าสนใจและช่วยให้สำหรับวิธีการที่มีประสิทธิภาพบางอย่าง; ลองดูที่เรียกว่า 'ฟังก์ชั่นการเขียนโปรแกรม' ถ้าคุณยังไม่ได้ทำ
9000

8

ฉันไม่สามารถแสดงความคิดเห็นได้เฉพาะกรณีของคุณ แต่การใช้ตัวแปรทั่วโลกเป็นบางครั้งเป็นทางออกที่ดี คลาสSystemของ Java เต็มไปด้วยตัวแปรคงที่ทั่วโลก

แต่โดยทั่วไปถ้าคุณคิดว่าคุณพูดถูกและเจ้านายของคุณผิดทำไมคุณไม่ถามเจ้านายของคุณเพื่ออธิบายว่าทำไมเขาคิดว่าตัวแปรทั่วโลกเป็นทางออกที่ดีกว่า ธรรมดา "ฉันไม่ชอบ" จะคลุมเครือเช่นเดียวกับ "ตัวแปรทั่วโลกมีความชั่วร้าย" คุณต้องเรียกร้องเพิ่มเติมจากเจ้านายของคุณ!

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


1
ดูjava.lang.Systemมีตัวแปรทั่วโลกสามตัวและสำหรับแต่ละตัวมีวิธีตั้งค่าอย่างเหมาะสม แต่Systemเต็มไปด้วยวิธีการคงที่ที่ส่งคืนวัตถุระดับโลกและไม่มีอะไรผิดปกติกับเรื่องนี้ไม่สามารถโต้เถียง
9000

2
ใช่; ฉันพิจารณาตัวแปรทั่วโลกเหมือนกับวิธีสแตติกที่ส่งคืนออบเจ็กต์ทั่วโลก
Joonas Pulakka

ดังนั้น Java ทำสิ่งนี้ เป็นคำถามที่แตกต่างอย่างสิ้นเชิงว่าเป็นความคิดที่ดีหรือไม่ เครื่องกำเนิดตัวเลขสุ่มมาตรฐานของ C คงสถานะโลกไว้ แต่โดยทั่วไปยอมรับว่ามันน่ากลัวและตัวสร้างตัวเลขสุ่มนั้นไม่สามารถใช้งานได้ในบางแอปพลิเคชัน (ดูตัวอย่างเช่น Bentley และคณะวิศวกรรมการเรียงลำดับ ) Java โดยเฉพาะอย่างยิ่งมีโฮสต์ของปัญหาการออกแบบ (ที่ได้รับการปรับปรุงให้ดีขึ้นส่วนหนึ่งเมื่อใน C #) เพื่อ I't จะมากระวังของการใช้มันเป็นอาร์กิวเมนต์เช่นนี้
Konrad Rudolph

@Konrald รูดอล์ฟ: ในที่สุดก็ตัดสินใจออกแบบ ทุกการตัดสินใจมีข้อดีข้อเสีย ตัวอย่างเช่นการรักษาสถานะโลกให้Systemง่ายขึ้น 99.9% ของกรณีการใช้งานที่ทำให้เกิดปัญหาในส่วนที่เหลือ 0.1% ไม่มีคำตอบที่ "ถูกต้อง" ว่า 0.1% นั้นคุ้มค่ากับความซับซ้อนที่เพิ่มขึ้นหรือไม่
Joonas Pulakka

5

ในฐานะคนที่อยู่ในตำแหน่งของคุณสิ่งที่คุณทำได้มากที่สุดคือเรียนรู้ ถ้าวัตถุนั้นเป็นค่าคงที่ (เช่นมันไม่สามารถเปลี่ยนแปลงได้และมันก็ไม่ได้รักษาสถานะไว้) หัวหน้าของคุณอาจจะถูกต้อง ไม่มีอันตรายใด ๆ ในการมีวัตถุคงที่ ท้ายที่สุดมีคำจำกัดความของ PI อยู่กี่คำ?

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

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


มันเป็นการฝึกงาน คุณควรจะเรียนรู้ สุ่มสี่สุ่มห้าทำในสิ่งที่เจ้านายของคุณพูดว่าไม่เรียน
David Thornley

5
ไม่ว่าจะเป็นเจ้านายของคุณ คำแนะนำของฉันตามที่เขียนก็คือสังเกตผลของการเลือกของเจ้านาย เรา (บนสแต็กแลกเปลี่ยน) ไม่สามารถตัดสินคุณค่าของสถานการณ์ได้เนื่องจากเราขาดข้อมูลสำคัญ นี่เป็นกรณีที่ต้องทำวิธีการทางวิทยาศาสตร์เล็กน้อย OP มีสมมติฐานที่หัวหน้าได้ท้าทาย ตอนนี้ถึงเวลาทำการทดสอบแล้ว
Berin Loritsch

2

ตัวแปรโกลบอลอาจเป็นทางออกที่ดีที่สุดทั้งนี้ขึ้นอยู่กับสถานการณ์ที่เฉพาะเจาะจง ในการเขียนโปรแกรมแบบฝังตัว globals ไม่ได้ใช้พื้นที่สแต็กและด้วยเหตุนี้จึงเป็นทางเลือกที่ดี

รอบโลกหรือไม่ฉันได้พบว่ามันเป็นแพรคซิสที่ดีที่จะใส่คำนำหน้าบน globals สิ่งนี้จะทำให้โปรแกรมเมอร์คนอื่นรู้รหัสของคุณเมื่อทราบว่าเกิดอะไรขึ้น


1

บางทีสิ่งที่เจ้านายของคุณต้องการคือให้คุณใช้รูปแบบซิงเกิล เป็นการปฏิบัติที่ดีมากเมื่อคุณต้องการเข้าถึงวัตถุบางอย่างจากหลาย ๆ กรณี

นี่คือลิงค์ไปยังคำอธิบาย wikipedias


ฉันคิดว่าgood practiceน่าจะใช้en.wikipedia.org/wiki/Dependency_inject
Oliver Weiler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.