2010-09-01 38 views
6

Tôi đang sử dụng khung thực thể với dịch vụ web và tôi có các đối tượng lớp từng phần thực thể được tạo tự động bởi dịch vụ web.Làm cách nào để tạo một nhóm các phương thức/thuộc tính trong một lớp?

Tôi muốn mở rộng các lớp này, nhưng tôi muốn nhóm chúng trong lớp được tạo theo cách tương tự như cách không gian tên sẽ (trừ bên trong một lớp).

Đây là lớp tạo của tôi:

public partial class Employee : Entity 
{ 
    public int ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

Và tôi muốn thêm một số đặc tính mới, chức năng, vv tương tự như:

public partial class Employee : Entity 
{ 
    public string FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

Tuy nhiên, tôi muốn nhóm bất kỳ thuộc tính bổ sung cùng vì vậy tôi có sự tách biệt rõ ràng hơn một chút so với các phương thức đã tạo. Tôi muốn để có thể gọi một cái gì đó như:

myEmployee.CustomMethods.FullName 

tôi có thể tạo ra lớp khác trong partial class gọi CustomMethods và vượt qua một tham chiếu đến lớp cơ sở để tôi có thể truy cập vào các thuộc tính tạo ra. Hoặc có thể chỉ đặt tên cho họ theo một cách cụ thể. Nhưng, tôi không chắc giải pháp tốt nhất là gì. Tôi đang tìm kiếm ý tưởng cộng đồng được sạch sẽ và nằm trong thực hành tốt. Cảm ơn.

+0

Btw, tại sao bạn muốn nhóm các thuộc tính tùy chỉnh? đôi khi bạn có thể sử dụng Thuộc tính để đánh dấu chúng. –

Trả lời

16

Dưới đây là một giải pháp khác sử dụng giao diện rõ ràng:

public interface ICustomMethods { 
    string FullName {get;} 
} 

public partial class Employee: Entity, ICustomMethods { 
    public ICustomMethods CustomMethods { 
     get {return (ICustomMethods)this;} 
    } 
    //explicitly implemented 
    string ICustomMethods.FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

Cách sử dụng:

string fullName; 
fullName = employee.FullName; //Compiler error  
fullName = employee.CustomMethods.FullName; //OK 
+2

+1 sử dụng giao diện rõ ràng giúp mã dễ đọc hơn với khả năng mở rộng tốt. –

+0

+1 cho giao diện rõ ràng –

+0

có thể buộc giao diện đó rõ ràng không? – hunter

2
public class CustomMethods 
{ 
    Employee _employee; 
    public CustomMethods(Employee employee) 
    { 
     _employee = employee; 
    } 

    public string FullName 
    { 
     get 
     { 
      return string.Format("{0} {1}", 
       _employee.FirstName, _employee.LastName); 
     } 
    } 
} 

public partial class Employee : Entity 
{ 
    CustomMethods _customMethods; 
    public CustomMethods CustomMethods 
    { 
     get 
     { 
      if (_customMethods == null) 
       _customMethods = new CustomMethods(this); 
      return _customMethods; 
     } 
    } 
} 

thường tôi sẽ đặt các thuộc tính như FullName ngay trên lớp một phần nhưng tôi có thể thấy lý do bạn có thể muốn tách.

+0

Tôi nghĩ đó là những gì bạn đang nói đến cuối câu hỏi của bạn. Tôi đoán câu trả lời này không phải là khủng khiếp và nhận được sự tách biệt mà bạn đang tìm kiếm. – hunter

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