เราทำการทดสอบหน่วยและการปรับโครงสร้างวัตถุทางธุรกิจของเราอีกมากมายและดูเหมือนว่าฉันมีความคิดเห็นที่แตกต่างกันมากในการออกแบบชั้นเรียนมากกว่าเพื่อนคนอื่น ๆ
ตัวอย่างคลาสที่ฉันไม่ใช่แฟนของ:
public class Foo
{
private string field1;
private string field2;
private string field3;
private string field4;
private string field5;
public Foo() { }
public Foo(string in1, string in2)
{
field1 = in1;
field2 = in2;
}
public Foo(string in1, string in2, string in3, string in4)
{
field1 = in1;
field2 = in2;
field3 = in3;
}
public Prop1
{ get { return field1; } }
{ set { field1 = value; } }
public Prop2
{ get { return field2; } }
{ set { field2 = value; } }
public Prop3
{ get { return field3; } }
{ set { field3 = value; } }
public Prop4
{ get { return field4; } }
{ set { field4 = value; } }
public Prop5
{ get { return field5; } }
{ set { field5 = value; } }
}
ในคลาส "ของจริง" พวกเขาไม่ได้เป็นสตริงทั้งหมด แต่ในบางกรณีเรามี 30 เขตข้อมูลสำรองสำหรับคุณสมบัติสาธารณะโดยสมบูรณ์
ฉันเกลียดชั้นเรียนนี้และฉันไม่รู้ว่าฉันแค่จู้จี้จุกจิก สิ่งที่ควรทราบ:
- เขตข้อมูลสำรองส่วนบุคคลที่ไม่มีตรรกะในคุณสมบัติดูเหมือนไม่จำเป็นและขยายชั้นเรียน
- ตัวสร้างหลายตัว (ค่อนข้างโอเค) แต่เมื่อรวมกับ
- คุณสมบัติทั้งหมดที่มีเซ็ตเตอร์สาธารณะฉันไม่ใช่แฟน
- อาจไม่มีการกำหนดคุณสมบัติใด ๆ เนื่องจากตัวสร้างเปล่าหากผู้โทรไม่รู้จักคุณอาจได้รับค่าที่ไม่พึงประสงค์และยากต่อการทดสอบพฤติกรรม
- มันมีคุณสมบัติมากเกินไป! (ในกรณี 30)
ฉันพบว่ามันยากมากที่จะรู้ว่าวัตถุFoo
อยู่ในสถานะใดในเวลาใด ๆ ในฐานะผู้ดำเนินการ มีการโต้แย้งว่า "เราอาจไม่มีข้อมูลที่จำเป็นProp5
ในการสร้างวัตถุในเวลานั้นโอเคฉันเดาว่าฉันเข้าใจได้ แต่ถ้าเป็นกรณีนี้จะทำให้Prop5
ประชาชนตั้งค่าได้เท่านั้น
ฉันแค่เป็นคนจู้จี้จุกจิกและ / หรือคลั่งไคล้ในการต้องการชั้นเรียนที่ "ใช้งานง่าย" เมื่อเทียบกับการเป็น "ง่ายต่อการเขียน (สาธารณะทุกอย่าง)"? เรียนเหมือนเสียงกรีดร้องดังกล่าวข้างต้นกับฉันฉันไม่รู้ว่ามันจะถูกนำไปใช้อย่างไรฉันจะทำทุกอย่างให้เป็นสาธารณะในกรณีนี้
ถ้าฉันไม่จู้จี้จุกจิกอย่างมากอะไรคือข้อโต้แย้งที่ดีที่จะต่อสู้กับความคิดแบบนี้? ฉันไม่ค่อยถนัดเรื่องข้อโต้แย้งอย่างชัดเจนเพราะฉันรู้สึกหงุดหงิดมากที่พยายามทำประเด็นให้สำเร็จ (ไม่ใช่ความตั้งใจจริง)
get
หรือset
:-) ได้อย่าง