ฉันเป็นนักพัฒนาที่ยาวนาน (ฉันอายุ 49 ปี) แต่ค่อนข้างใหม่สำหรับการพัฒนาเชิงวัตถุ ฉันได้อ่านเกี่ยวกับ OO มาตั้งแต่ไอเฟลของ Bertrand Meyer แต่ได้เขียนโปรแกรม OO น้อยมาก
ประเด็นก็คือหนังสือทุกเล่มเกี่ยวกับการออกแบบ OO เริ่มต้นด้วยตัวอย่างของเรือรถยนต์หรือสิ่งของทั่วไปที่เราใช้บ่อยมากและพวกเขาก็เริ่มเพิ่มคุณสมบัติและวิธีการและอธิบายว่าพวกเขาจำลองสถานะของวัตถุอย่างไรและสามารถทำอะไรได้บ้าง มัน.
ดังนั้นพวกเขาจึงมักจะไปบางอย่างเช่น "ยิ่งโมเดลดีขึ้นเท่าไรมันก็จะแสดงวัตถุในแอปพลิเคชันได้ดีเท่านั้นและยิ่งออกมาดีกว่า"
จนถึงตอนนี้ดี แต่ในทางกลับกันฉันได้พบผู้เขียนหลายคนที่ให้สูตรเช่น "คลาสควรพอดีในหน้าเดียว" (ฉันจะเพิ่ม "ในขนาดจอภาพอะไร?" ตอนนี้เราพยายามไม่ เพื่อพิมพ์รหัส!)
ยกตัวอย่างเช่นPurchaseOrder
คลาสที่มีเครื่องสถานะ จำกัด ควบคุมพฤติกรรมและคอลเลกชันPurchaseOrderItem
หนึ่งในข้อโต้แย้งที่นี่ในที่ทำงานคือเราควรใช้PurchaseOrder
คลาสที่เรียบง่ายด้วยวิธีการบางอย่าง (น้อยกว่าคลาสข้อมูล) และมีPurchaseOrderFSM
“ชั้นผู้เชี่ยวชาญ” ที่จับเครื่องสถานะ จำกัด PurchaseOrder
สำหรับ
ฉันจะบอกว่าตกอยู่ในหมวดหมู่ "อิจฉาคุณสมบัติ" หรือ "ความไม่เหมาะสมที่ใกล้ชิด" ของการโพสต์โค้ดของ Jeff Atwood's Smellsเมื่อสยองขวัญการเข้ารหัส ฉันแค่เรียกมันว่าสามัญสำนึก ถ้าผมสามารถออกอนุมัติหรือยกเลิกคำสั่งซื้อของฉันจริงแล้วPurchaseOrder
ชั้นควรมีissuePO
, approvePO
และcancelPO
วิธีการ
นั่นไม่ได้เกิดขึ้นกับ "การเพิ่มการเชื่อมโยงสูงสุด" และ "ลดการแต่งงาน" หลักการเก่า ๆ ที่ฉันเข้าใจว่าเป็นสิ่งสำคัญของ OO หรือไม่?
นอกจากนี้นั่นไม่ได้ช่วยในการบำรุงรักษาของชั้นเรียนหรือไม่?
PurchaseOrder
คุณก็สามารถตั้งชื่อวิธีการของคุณissue
, และapprove
ต่อท้ายเพิ่มมูลค่าเชิงลบเท่านั้นcancel
PO