Chúng tôi đang thực hiện nhiều thử nghiệm đơn vị và tái cấu trúc các đối tượng kinh doanh của mình và dường như tôi có những ý kiến rất khác nhau về thiết kế lớp so với các đồng nghiệp khác.
Một lớp ví dụ mà tôi không phải là người hâm mộ của:
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; } }
}
Trong lớp "thực", chúng không phải là tất cả các chuỗi, nhưng trong một số trường hợp, chúng tôi có 30 trường sao lưu cho các thuộc tính hoàn toàn công khai.
Tôi ghét lớp học này, và tôi không biết nếu tôi chỉ kén chọn. Một vài điều cần lưu ý:
- Các trường sao lưu riêng không có logic trong các thuộc tính, dường như không cần thiết và làm mờ lớp
- Nhiều constructor (hơi ok) nhưng kết hợp với
- tất cả các tài sản có một setter công khai, tôi không phải là một fan hâm mộ.
- Có khả năng không có thuộc tính nào được gán một giá trị do hàm tạo trống, nếu người gọi không biết, bạn có thể nhận được một số rất không mong muốn và khó kiểm tra hành vi.
- Đó là quá nhiều tài sản! (trong 30 trường hợp)
Tôi thấy khó khăn hơn nhiều để thực sự biết đối tượng Foo
đang ở trạng thái nào tại bất kỳ thời điểm nào, với tư cách là người thực hiện. Đối số được đưa ra "chúng ta có thể không có thông tin cần thiết để thiết lập Prop5
tại thời điểm xây dựng đối tượng. Ok, tôi đoán tôi có thể hiểu điều đó, nhưng nếu đó là trường hợp chỉ Prop5
đặt công khai, không phải lúc nào cũng có tối đa 30 thuộc tính trong một lớp.
Có phải tôi chỉ kén chọn và / hoặc điên vì muốn một lớp "dễ sử dụng" chứ không phải là "dễ viết (mọi thứ công khai)"? Các lớp học như tiếng hét ở trên với tôi, tôi không biết nó sẽ được sử dụng như thế nào, vì vậy tôi sẽ chỉ công khai mọi thứ trong trường hợp này .
Nếu tôi không quá kén chọn, những lý lẽ tốt để chống lại kiểu suy nghĩ này là gì? Tôi không giỏi trong việc tranh luận rõ ràng, vì tôi rất bực mình khi cố gắng đưa ra quan điểm của mình (tất nhiên là không cố ý).
get
hoặc set
:-)