Tôi sẽ làm cho trình bao bọc khớp với giao diện dịch vụ web. Nó cũng sẽ là một ý tưởng tốt để bọc tất cả các vật thể tiếp xúc. Về cơ bản tạo proxy. Những gì tôi thấy thực sự hữu ích cho loại điều này là tạo ra một giao diện phù hợp với API và thực hiện điều đó. Bằng cách đó, bạn có thể tạo một phiên bản giả của DLL để kiểm tra mà không cần chi phí (hoặc chi phí tiềm năng) liên quan đến cuộc gọi WCF. Nó cũng sẽ làm cho nó đơn giản hơn nhiều nếu bạn cần phải thay thế các cuộc gọi WCF với một nhà cung cấp thay thế trong tương lai.
Ví dụ: giả sử rằng chúng tôi có dịch vụ WCF cho nhà cung cấp bên ngoài để xử lý thanh toán. Một cái gì đó như thế này:
void ProcessPayment(float amount);
Chúng ta có thể dễ dàng móc mã này vào mã của chúng tôi. Vấn đề là một thay đổi đơn giản đối với giao diện sẽ dẫn đến việc chúng ta phải thực hiện thay đổi ở mọi nơi mã được tham chiếu. Điều tương tự cũng cần thiết nếu chúng tôi thay đổi nhà cung cấp cho người khác, ngay cả khi giao diện gần như giống hệt nhau. Thêm một cái gì đó giống như một giao diện đơn giản:
interface IPaymentProvider
{
void ProcessPayment(float amount);
}
Sẽ hoàn toàn tách mã của chúng tôi khỏi dịch vụ WCF. Chúng tôi có thể dễ dàng xây dựng một lớp học như sau:
class PaymentProviderAWrapper : IPaymentProvider
{
void ProcessPayment()
{
// Call the WCF service
}
}
Chúng tôi có thể tải động với khung nhà máy hoặc khuôn khổ phụ thuộc như Spring.NET. Thay đổi thành nhà cung cấp B sẽ đơn giản như tạo trình bao bọc mới:
class PaymentProviderBWrapper : IPaymentProvider
{
void ProcessPayment()
{
// Call provider B's Native DLL
}
}
Chuyển mã từ nhà cung cấp A sang B sẽ đơn giản như thay đổi cài đặt cấu hình.
Ngay cả khi chúng tôi biên soạn thư viện trực tiếp vào mã của chúng tôi, tất cả những gì chúng tôi cần làm là thay đổi logic xây dựng để sử dụng thư viện mới. Phần còn lại của ứng dụng của chúng tôi sẽ không thay đổi gì cả. Chỉ là một biên dịch lại đơn giản.
thêm vào các cuộc thảo luận dưới đây (thực hành tốt nhất) tôi tìm thấy những điều sau đây (bằng cách Asker giống nhau) khá hữu ích: http://stackoverflow.com/questions/10575724/moving-wcf-contracts-to-a-separate-dll –