2011-01-25 53 views
5

Tôi cần phải viết trình bao bọc cho tập hợp các phương thức web được hiển thị trong một dịch vụ web cụ thể. Nó có ý nghĩa để dính phương pháp này wrapper mới trong cùng một dịch vụ vì nó ảnh hưởng đến cùng một loại đối tượng.Gọi phương thức web từ cùng một dịch vụ web

Hầu hết các phương pháp web này chỉ là phương pháp mỏng gọi phương thức tĩnh trong các tệp khác, điều này là tốt, nhưng chúng cũng có một số logic bảo mật được thực hiện trước các cuộc gọi phương thức tĩnh này. Thay vì tạo lại logic bảo mật trước mỗi cuộc gọi phương thức tôi muốn kết nối, liệu có thể chỉ gọi những phương thức web khác này từ bên trong cùng một dịch vụ cục bộ, hay thực tế xấu này?

Dưới đây là một ví dụ:

[WebMethod] 
public int SmallMethod1(int a) 
{ 
    //SecurityLogic 
    return AnObject.StaticMethod1(); 
} 

[WebMethod] 
public int SmallMethod2(int b) 
{ 
    //SecurityLogic 
    return AnObject.StaticMethod2(); 
} 

[WebMethod] 
public int WrapperMethod(int c) 
{ 
    return AnObject.StaticMethod1() + AnObject.StaticMethod2(); 
} 

Trả lời

4

Nói chung, bạn sẽ muốn để tách giao diện nào của dịch vụ web của bạn từ việc thực hiện thực tế như sạch càng tốt, trong ví dụ của bạn, bạn đã làm điều này bằng cách đóng gói chúng trong AnObject cho phép đơn vị kiểm tra các phương pháp đóng gói riêng biệt (đó là một vấn đề lớn, đặc biệt là với các phương pháp web).

Có nói rằng từ góc độ kiểm tra tôi sẽ đề nghị thay vì làm điều này:

[WebMethod] 
public int WrapperMethod(int c) 
{ 
    return AnObject.WrapperMethod(c) 
} 

này sẽ cho phép bạn để viết bài kiểm tra mà kiểm tra WrapperMethod trực tiếp (gói gọn trong AnObject), chứ không phải cố gắng để tái tạo thử nghiệm cho AnObject.StaticMethod1() + AnObject.StaticMethod2() trong bài kiểm tra đơn vị của bạn - điều này trở nên lộn xộn một cách nhanh chóng bởi vì bây giờ bạn có cùng một logic trong hai điểm khác nhau.

+0

Điểm tuyệt vời về các khía cạnh thử nghiệm. Cảm ơn! –

0

Không hề. Một ý tưởng rất hay của nó là đóng gói logic đó. Bạn có thể có một số AnObject.WrapperStaticMethod().

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