“ วางวัตถุเกินไป”


21

ฉันมาจากภูมิหลังที่แข็งแกร่งของ OO และฉันเพิ่งเริ่มทำงานในองค์กรซึ่งถึงแม้ว่ารหัสจะถูกเขียนใน Java แต่ก็มีความสำคัญน้อยกว่าในการออกแบบ OO ที่ดีกว่าที่ฉันเคยทำ ฉันได้รับการบอกกล่าวว่าฉันแนะนำ "นามธรรมมากเกินไป" และฉันควรจะเขียนรหัสตามวิธีที่มันทำมาตลอดซึ่งเป็นรูปแบบขั้นตอนใน Java

TDD นั้นไม่ได้ฝึกฝนมากที่นี่ แต่ฉันต้องการมีรหัสที่สามารถทดสอบได้ การฝังตรรกะทางธุรกิจในวิธีส่วนตัวแบบคงที่ใน "คลาสพระเจ้า" ขนาดใหญ่ (ซึ่งดูเหมือนจะเป็นบรรทัดฐานสำหรับทีมนี้) นั้นไม่สามารถทดสอบได้มากนัก

ฉันต่อสู้อย่างชัดเจนในการสื่อสารแรงจูงใจของฉันกับเพื่อนร่วมงานของฉัน ใครบ้างมีคำแนะนำเกี่ยวกับวิธีที่ฉันสามารถโน้มน้าวให้เพื่อนร่วมงานของฉันที่ใช้ OO และ TDD นำไปสู่รหัสบำรุงรักษาง่ายขึ้น?

คำถามเกี่ยวกับหนี้ทางเทคนิคนี้เกี่ยวข้องกับคำถามของฉัน อย่างไรก็ตามฉันพยายามหลีกเลี่ยงการก่อหนี้ในครั้งแรกซึ่งตรงข้ามกับการจ่ายเงินหลังจากข้อเท็จจริงซึ่งเป็นคำถามอื่น ๆ ที่ครอบคลุม


17
บทบาทของคุณคืออะไร นักพัฒนาฮึดฮัด คุณกำลังเมา - รับงานที่ดีขึ้น นำไปสู่การพัฒนาหรือไม่ คุณอาจจะสามารถสร้างความแตกต่าง ...
แมทธิวฟลินน์

2
ไม่ให้หนี้ที่มีเทคโนโลยีมากเป็นที่เกี่ยวข้องกับการออกแบบที่ไม่ดีและคนที่จะไม่เปลี่ยน
Ozz

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

5
ขออภัยคุณต้องจากไป คุณกำลังพูดคุยกับหัวหน้าของเพื่อนร่วมงานของคุณ มันจะไม่เปลี่ยนแปลงจนกว่าโครงการจะไม่มีการเปลี่ยนแปลง หากคุณไม่ชอบการทดสอบด้วยตนเองและการเดินขบวนคุณควรไปที่อื่นดีกว่า
kevin cline

4
หากไม่เห็นรหัสที่เป็นปัญหา (ใช่มันยากที่จะให้ตัวอย่างที่ดีพอดังนั้นเราเพียงแค่ต้องเชื่อใจการตัดสินใจของคุณที่นี่) เป็นการยากที่จะบอกว่ามี OO ที่แน่นอนหรือหากคุณกำลังผลักดันสินค้าที่มีการออกแบบทางวิศวกรรม OO abtractions ไม่มีเหตุผลที่ดี ฉันคิดว่าทุกคนได้เห็นตัวอย่างของ OOP ที่มีการออกแบบทางวิศวกรรมมากเกินไปที่ซึ่ง abstractions วางอยู่บนชั้นของโรงงานนามธรรมที่ผลิตโรงงานนามธรรมเป็นต้น
Kromster กล่าวว่าสนับสนุน Monica

คำตอบ:


32

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

ผู้คนสามารถและเขียนโค้ดแบบแยกส่วนที่มีประสิทธิภาพเป็นนามธรรมและปราศจากข้อบกพร่องในรูปแบบวิธีการทำงานตลอดเวลา Java เป็นทางเลือกที่แปลกของภาษาสำหรับร้านค้าดังกล่าว แต่ฉันสามารถเห็นมันเกิดขึ้นหากปัจจัยภายนอกตัดสินใจภาษาเช่นต้องการที่จะพัฒนาสำหรับ Android เช่น

ทุกคนเป็นอัจฉริยะ แต่ถ้าคุณตัดสินปลาด้วยความสามารถในการปีนต้นไม้มันจะใช้ชีวิตทั้งชีวิตของมันโดยเชื่อว่ามันโง่ - Albert Einstein

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

ในทางกลับกันหากรหัสนั้นยุ่งเหยิงในกระบวนทัศน์ทั้งสองคุณควรจะลดความสูญเสียของคุณ


3
มันเป็นขั้นตอนและยุ่ง แต่ฉันกำลังพูดถึงรหัสใหม่ที่ฉันเขียนถูกเรียกว่า "
Too

5
โค้ดโพรซีเดอร์ยุ่งที่ถูกขยายด้วยโค้ด OO อาจไม่ใช่การปรับปรุงหลังจากทั้งหมดเพียงเพิ่มความสับสน
wirrbel

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

3
@ThuneGrill: ถูกต้องของ Karl ยึดมั่นในเหตุผลเชิงปฏิบัติไม่ใช่คนเคร่งศาสนา OOP เป็นความคิดที่ดีอย่างแน่นอน แต่ฉันเห็นว่ามันเป็นสิ่งที่ไร้สาระมาก ผลที่ได้คือทำให้ภูเขาออกจากโมเลกุล สิ่งที่สามารถทำได้ใน 1,000 บรรทัดของรหัสท้ายเป็น 10,000 บรรทัดของรหัสที่มีคลาสมากมาย จากนั้น Gee มันยากที่จะรักษาและประสิทธิภาพก็แย่ (ไม่ว่าจะใช้คลาสชุดใด)
Mike Dunlavey

1
ฉันไม่จำเป็นต้องยอมแพ้กับความคิดที่ว่าคุณสามารถโน้มน้าวผู้คนในเรื่องนี้ มันยาก แต่ก็สามารถทำได้ - ฉันทำไปแล้ว เนื่องจากคำถามนี้ดูเหมือนว่าปิดดูworkplace.stackexchange.com/questions/9703/...
เอมี่ Blankenship

7

เมื่ออ่านคำถามของฉันฉันจำได้ว่าหนังสือเคล็ดลับหนึ่งเล่มของ Pragmatic Programmer

หนึ่งในเคล็ดลับคือBe a Catalyst for Change:

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

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

ดังนั้นฉันคิดว่าถ้าคุณเริ่มทำงานได้ดีกับความรู้ OO และ TDD ของคุณเร็ว ๆ นี้พวกเขาจะเริ่มมองหาและถามเกี่ยวกับงานของคุณ


พยายามเป็น แต่สถาปนิก uber (ผู้ไม่ใช้รหัส) จะไม่มีเลย
ThuneGrill

ทันทีที่เขาสังเกตเห็นประโยชน์ของ TDD และ OO ที่ดีกว่า (ความน่าเชื่อถือผลผลิต ... ) คุณจะได้รับความสนใจของคุณ!
Rodrigo

3

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

สร้างโรงงานที่โรงงานผลิตวัตถุมากกว่าหนึ่งประเภท ใช้การฉีดพึ่งพาซึ่งจะแสดงผลประโยชน์ทันที สร้างอินเตอร์เฟสที่จะนำไปใช้จริงโดยคลาสมากกว่าหนึ่งคลาส

สิ่งที่ฉันเห็นบ่อยเกินไปใน "true OO" คือเทคนิคขั้นสูงใช้เพื่อแก้ปัญหาที่ง่ายมากในวิธีที่ซับซ้อนมากเกินไป

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

สงครามชนะการต่อสู้ครั้งละหนึ่งครั้ง


1

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

แน่นอนฉันคิดว่ามีกรณีของการใช้เกินนามธรรมในหลายรหัสฐานวันนี้ ใส่เฉพาะในสิ่งที่คุณต้องการและรวมถึง abstractions ด้วย


1
เพิ่งทำนั่นคือสิ่งที่ทำให้เกิดการอภิปรายทั้งหมด An ฉันแนะนำแค่ 3-4 abstractions บนฟังก์ชันที่มีอยู่
ThuneGrill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.