2013-07-05 31 views
5

Tôi có một chút vấn đề, và tôi không thực sự chắc chắn làm thế nào để giải quyết nó. Tôi có lắp ráp mô hình của tôi trong đó có khoảng 200 đối tượng kinh doanh khác nhau (Đặt hàng, khách hàng, sản phẩm, vv).Có điều gì như quá nhiều dịch vụ WCF không?

Tôi không muốn trả lại toàn bộ biểu đồ đối tượng khi ai đó muốn nhận, ví dụ: Đơn đặt hàng. Thay vào đó, tôi muốn đơn giản trả về đối tượng và tải lười (hoặc thậm chí tải không đồng bộ) các phần khác. Điều này có vẻ như nó sẽ dẫn đến rất nhiều "Get (Object Name)" dịch vụ:

  • GetOrder (int id)
  • GetCustomer (int id)
  • GetProduct (int id)
  • v.v.

Tôi không muốn tạo 200 phương thức khác nhau, mỗi phương thức cho mỗi thao tác Nhận. Tôi nhận ra tôi có thể có thể làm một cái gì đó như: GetObject(string type, int id), và sau đó sử dụng phản ánh bằng cách nào đó để có được các đối tượng thích hợp trở lại, nhưng tôi nghĩ rằng thậm chí còn tồi tệ hơn (có thể).

Nếu tôi, thay vào đó, sử dụng mẫu T4 để tự động hóa công việc tạo từng dịch vụ khác nhau, điều đó sẽ tốt hơn ... nhưng nó vẫn khiến tôi lo lắng về một điều ... hiệu suất.

Thật tệ khi có 200+ dịch vụ khác nhau được hiển thị (một cho mỗi đối tượng)?

+0

Bạn nên xác định "xấu" chặt chẽ hơn để đặt câu hỏi này thành một câu hỏi lành mạnh. – spender

+0

Tùy thuộc vào cách khách hàng sẽ gọi nó. Nếu bạn không bao giờ gọi 199, thì bạn không thực sự có nhiều dịch vụ. Nếu khách hàng của bạn trong một tương tác điển hình gọi tất cả 200 người trong số họ, thì bạn có API thực sự trò chuyện. API nên được chunky & không chatty và kết hợp như nhiều hành động với nhau mà bạn có thể dự báo có thể được gọi với nhau. API chi tiết + chunky sẽ có hơn 200 điểm kết thúc dịch vụ. – MatthewMartin

+1

Bạn có nghĩa là có phương pháp riêng cho từng loại trong một dịch vụ duy nhất hoặc lưu trữ từng loại như một dịch vụ riêng biệt? – Rajesh

Trả lời

4

Từ kinh nghiệm của tôi, WCF + Khung thực thể + Tải trọng lười + đồ thị đối tượng sâu + yêu cầu hiệu suất = các vấn đề lớn tiềm ẩn.

Không có viên đạn bạc tuyệt vời mà giải quyết tất cả các vấn đề, tôi đã kết thúc như sau:

  • tải lười biếng vô hiệu hóa. Tôi nghĩ rằng tải chậm chỉ tạo ra nhiều vấn đề hơn là giải quyết vấn đề hiệu suất nếu không được sử dụng đúng cách, khó nắm bắt ngoại lệ (như một yêu cầu SQL có thể được thực thi bất kỳ lúc nào, không chỉ trên rằng dòng mã ban đầu tìm nạp thực thể gốc từ DB)
  • Mẫu T4 được sửa đổi, do đó, bộ công cụ chuyển đổi thuộc tính điều hướng hiện là private. bộ sưu tập không nhiều của các đối tượng tự động tuần tự vào phía khách hàng
  • háo hức đồ thị đối tượng được nạp gửi cho khách hàng thông qua WCF, cũng như tùy chỉnh POCO (trong trường hợp bạn muốn lấy nhiều thực thể trong một cuộc gọi WCF đơn).
  • Không có mẫu kho lưu trữ chung nào. Khách hàng chỉ cần gọi một số phương thức GetXXXX/GetXXXByYYY. Và thậm chí GetXXXByYYYWithZZZZWithWWWW trong đó ZZZZWWWW là tên của các thuộc tính được tải mong muốn. Có, có thể có phương thức, nhưng bạn chỉ tạo chúng khi thực sự cần thiết bởi ứng dụng của khách hàng bên ứng dụng và bạn biết mình đang làm gì. Điều này rất hữu ích để có màn trình diễn tốt.

Thật tệ khi có 200+ dịch vụ khác nhau được hiển thị (một cho mỗi đối tượng )?

Đó là hơn 200 hoạt động khác trong một dịch vụ duy nhất (tôi giả sử). Nếu khách hàng của bạn thực sự cần truy cập vào tất cả các thực thể phía máy chủ của bạn, thì có, hơn 200 hoạt động là OK, không có phép thuật nào ở đây.

+0

Câu trả lời thực sự tốt, nhưng khi ông nói ** một trong mỗi đối tượng ** nó có vẻ hơi lạ. – gustavodidomenico

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