2011-11-20 22 views
7

Tôi có nhiều lớp Azure chứa các trường cho ngày và sửa đổi bằng cách theo dõi. Các lĩnh vực như:Đây có phải là cách hợp lệ để đơn giản hóa các lớp học kế thừa của tôi không?

[DisplayName("Created By")] 
public string CreatedBy { get; set; } 
[DisplayName("Modified By")] 
public string ModifiedBy { get; set; } 

Tôi muốn tránh lặp lại vì vậy tôi đang xem xét việc tạo ra một lớp để chứa những ví dụ như thế này:

public class TableServiceEntityRowInfo : TableServiceEntity 
{ 
    [DisplayName("Created By")] 
    public string CreatedBy { get; set; } 
    [DisplayName("Modified By")] 
    public string ModifiedBy { get; set; } 
} 

Đối với các lớp dữ liệu của tôi sau đó thay vì có họ kế thừa từ TableServiceEntity tôi muốn thiết lập các thông tin sau:

public class MyClass : TableServiceEntityRowInfo 
{ 

} 

Đây có phải là cách hợp lệ và hợp lý để thêm thông tin bổ sung vào các trường. Lý do tôi hỏi ở đây là vì tôi đang lên kế hoạch để làm điều này với rất nhiều lớp và tôi muốn đảm bảo tôi làm đúng.

+0

Tôi không phải 100, nhưng nói chung tôi cố gắng kế thừa nếu các lớp "IS A" của phụ huynh. Trong trường hợp của bạn, chúng giống như "HAS A" trong trường hợp tôi có thể nhóm các thuộc tính liên quan thành một lớp riêng biệt và phơi bày thuộc tính đó trên các lớp cần chức năng này, tức là MyClass có một thuộc tính có tên EntityRowInfo chứa thuộc tính ModifiedBy, CreatedBy – dreza

Trả lời

8

Có, điều này hợp lệ và hợp lý.

Nếu có bất kỳ mối quan tâm cụ thể nào về Azure, tôi không thể nói điều đó.

Đối với nhận xét về "IS A" so với "HAS A", tôi nghĩ rằng nó có thể được bỏ qua một cách an toàn tại đây. Thực sự, nó gần như đi xuống để đặt tên theo phong cách. Bạn đã đặt tên cho lớp cơ sở là TableServiceEntityRowInfo vì nó là TableServiceEntity rằng có thông tin hàng. Nếu bạn gọi nó thay vì AuditableTableServiceEntity vì nó có các trường để kiểm tra. Bây giờ nó là chính xác như nhau, nhưng bạn có thể yêu cầu rằng mỗi lớp kế thừa "IS A"AuditableTableServiceEntity.

Bạn cũng có thể muốn đánh dấu lớp cơ sở là abstract để rõ ràng rằng nó không nên được khởi tạo, chỉ được kế thừa.

+0

Tôi thích việc đặt tên rất nhiều và nhận xét về trừu tượng. Cảm ơn rất nhiều. –

+0

Điều này sẽ làm việc tốt trong Azure là TableServiceEntity mà lớp của bạn kế thừa từ chỉ là một lớp rất cơ bản với các thuộc tính RowKey, PartitionKey và Dấu thời gian. – knightpfhor

Các vấn đề liên quan