2012-02-09 35 views
5

Tôi có ba ứng dụng chính có chức năng kinh doanh riêng (mạng, thư mục hoạt động và bộ phận trợ giúp). Mỗi người đang chạy ASP.NET v2 hoặc v3 và có cơ sở dữ liệu riêng của họ. Tuy nhiên, các hàm ứng dụng đã hợp nhất một chút để các mô hình được tái tạo trong từng ứng dụng và logic ứng dụng cùng với nó. Vì vậy, bây giờ tôi có một số khó khăn để duy trì mã. Vì vậy, đây là câu hỏi của tôi:Lựa chọn thiết kế: WCF hoặc Ngăn xếp dịch vụ?

  1. Việc chuyển mô hình và kho lưu trữ của tôi sang WCF là lựa chọn hợp lý cho loại kiến ​​trúc này?

  2. Việc sử dụng chồng dịch vụ như json được tuần tự hóa có phải là lựa chọn tốt hơn không? Tôi tưởng tượng điều này sẽ nhanh hơn việc thiết lập một ứng dụng wcf trung tâm.

Tôi không quá quen thuộc với giao tiếp giữa các ứng dụng web asp.net mvc nên hãy chỉ cho tôi đúng hướng.

Trả lời

1

Tôi khuyên bạn nên phát triển một service layer per the design pattern described by Fowler. Lớp dịch vụ này gói gọn các mô hình miền và kho lưu trữ khác nhau và xử lý tương tác giữa các miền/mô hình khác nhau. Đây sẽ là một hội đồng chứ không phải WCF hay bất kỳ loại dịch vụ web nào khác. Nếu bạn yêu cầu một dịch vụ web WCF thì nó sẽ là một lớp rất mỏng về cơ bản có một hợp đồng bắt chước lớp dịch vụ và mục đích duy nhất là cung cấp giao diện dịch vụ web hoặc API.

Có một vài cách mà ứng dụng MVC có thể tương tác với lớp dịch vụ của bạn. Nếu bạn đang tạo các mô hình xem trong Bộ điều khiển của mình thì nó có thể truy cập trực tiếp vào lớp dịch vụ. Có thêm chi phí để gọi nó thông qua một dịch vụ web mà rất có thể không cần thiết trong trường hợp này. Sử dụng cách tiếp cận này lớp dịch vụ là khá nhiều Model của bạn trong bộ ba MVC.

Cách khác để truy cập lớp dịch vụ là từ Chế độ xem/ứng dụng khách sử dụng AJAX cho các ứng dụng khách phong phú. Trong trường hợp này, bạn sẽ sử dụng MVC để đặt một API REST trên tầng dịch vụ của bạn để bạn có thể tạo AJAX POST's, sử dụng một cái gì đó như JQuery, trực tiếp đến dịch vụ web để cập nhật và truy xuất dữ liệu cho trang web.

Lưu ý với kiến ​​trúc này, bạn có thể sử dụng kết hợp cả hai cách tiếp cận. Bạn có thể truy cập lớp dịch vụ trực tiếp từ Bộ điều khiển để hiển thị một số trang ban đầu và sau đó sử dụng giao diện REST dịch vụ web cho các cuộc gọi AJAX trong tương tác người dùng.

+0

Tôi không hiểu ý bạn là gì bằng cách truy cập trực tiếp vào lớp dịch vụ. Điều gì sẽ là phương pháp cho một ứng dụng MVC để liên lạc với lớp dịch vụ của người khác? Webclient? .NET Remoting? Tôi muốn có thể truy cập trực tiếp vào bối cảnh dữ liệu hoặc kho lưu trữ của một ứng dụng khác. – Jiminy

+0

Lớp dịch vụ mà tôi đang đề cập đến là một assembly .NET hoặc DLL. Vì vậy, nó chỉ là một thư viện được tham chiếu trong bất kỳ ứng dụng nào cần sử dụng nó. Bạn không muốn có điều này như là một tầng vật lý riêng biệt trừ khi có những lợi ích thực sự vì các chi phí liên quan đến nó. Nếu bạn cần phải đặt điều này trong một tầng sau đó tạo ra một wrapper dịch vụ WCF xung quanh hội đồng/thư viện này. Kiểu giao diện dịch vụ web phụ thuộc vào máy khách sử dụng nó (ví dụ: REST sử dụng JSON cho một máy khách web). Và như đã đề cập trước đó, bạn có thể trộn và kết hợp bằng WCF và thư viện. –

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