2012-02-13 52 views
5

Phương pháp tốt để liên lạc giữa các bộ điều khiển liên kết lỏng lẻo trong MVC/MVP là gì?Liên lạc giữa các bộ điều khiển trong MVC/MVP

Ví dụ: trong Trích dẫn, người dùng phải tạo và thêm liên hệ mới hoặc thêm liên hệ hiện có.

Họ chọn tạo liên hệ mới. Khi hoàn thành, liên hệ được thêm vào báo giá và giao diện người dùng trả về người dùng cho báo giá đó. Nếu họ nhấn hủy, họ sẽ được đưa trở lại báo giá.

Tôi muốn sử dụng lại Liên hệ ở nơi khác, do đó không nên biết gì về Trích dẫn. Ví dụ, nếu tôi tạo một số liên lạc từ danh sách liên lạc, nó sẽ trở lại đó khi hoàn thành.

Dưới đây là một số tùy chọn mà tôi đã nghĩ:

  • hành động ContactsController gọi ApplicationController.getNextStep (this) và ApplicationController con số nó ra bước tiếp theo trên danh nghĩa của ContactsController

  • ContactsController tăng sự kiện "hành động hoàn toàn" hoặc tương tự và ApplicationController đang lắng nghe sự kiện này và gọi đúng bước tiếp theo

  • QuoteController chuyển trong một "baton" để ContactsController với bước tiếp theo, mà ContactController gọi khi thực hiện

  • Danh bạ điều khiển sự kiện "actioncomplete" hoặc tương tự, và QuotesController đang lắng nghe sự kiện này và gọi đúng bước tiếp theo.

Bạn có kinh nghiệm về những điều này không? Những ý tưởng khác? Điều gì sẽ gây ra những cơn đau đầu ít nhất trong một ứng dụng lớn?

Cảm ơn!

Trả lời

1

Đoán tôi sẽ trả lời câu hỏi của riêng tôi. Hy vọng rằng, tôi nhận được tiền thưởng ngọt ngào, ngọt ngào đó.

Hãy suy nghĩ về điều này từ góc độ gửi nhân viên tư vấn của bạn đến khách hàng. Anh ấy biết cách làm công việc của mình, nhưng anh ấy không biết phải làm gì khi anh ấy kết thúc. Bạn muốn anh ta linh hoạt về những gì anh ấy làm tiếp theo.

Thỉnh thoảng sếp của anh ấy gửi anh ta ra ngoài. Đôi khi Giám đốc điều hành làm (ông có thể không biết nơi để gửi cho anh ta sau). Đôi khi khách hàng gọi anh ta với một trường hợp khẩn cấp (anh ấy chắc chắn không biết nơi để gửi anh ta sau). Đôi khi anh ta chỉ lấy một nhiệm vụ mới từ bảng trắng.

Ông có thể làm một trong những điều sau:

  • bạn có thể nói với anh ấy để gọi trụ sở chính khi ông hoàn thành công việc, và trụ sở chính sẽ con số nó ra cho anh ta. anh ta không cần biết về bất kỳ người nào khác, chỉ là số điện thoại của văn phòng chính.

  • bạn có thể cho anh biết phải làm gì khi anh ấy kết thúc, trước khi anh ấy rời đi. nếu anh ta đi một lúc, nhiệm vụ tiếp theo của anh ta có thể đã thay đổi trong thời gian chờ đợi.

  • bạn có thể yêu cầu anh ấy đăng lên facebook khi anh ấy hoàn thành, trụ sở chính sẽ tìm kiếm và sẽ cho anh ấy biết phải làm gì. trụ sở chính sẽ cần phải được xem cho rất nhiều bài viết facebook từ tất cả các chuyên gia tư vấn của họ.

  • bạn có thể yêu cầu người giám sát của mình trả lời cuộc gọi của mình khi anh ấy kết thúc, nhưng sau đó người giám sát của anh ấy cần phải ở trong văn phòng và có thể anh ấy sẽ chuyển người giám sát.

Cá nhân, tôi sẽ chuyển sang chức năng gọi lại. Nếu callback đó là null, callee nên yêu cầu ứng dụng phải làm gì. Điều đó mang lại cho bạn một số tính linh hoạt, đồng thời cũng cho phép một quy trình cha mẹ quản lý mọi thứ và không dựa vào một chức năng lớn trong ứng dụng.

Điều này tương đương với việc cung cấp cho nhà tư vấn số lượng khách hàng tiếp theo cần gọi khi thực hiện xong. Nếu anh ta không nhận được một số, anh ấy gọi trụ sở chính.

Bạn cũng có thể sử dụng sự kiện và không phải là ý tưởng tồi. Vấn đề duy nhất có thể là nếu nhiều đối tượng đang lắng nghe sự kiện này, điều gì đó không được phép xảy ra.

1

Bạn có thể triển khai một số dạng ngăn điều hướng, trong đó bộ điều khiển Bộ đếm hoặc Bộ điều khiển danh bạ lần đầu tiên được đẩy vào nó, và sau đó chúng đẩy bộ điều khiển Liên hệ vào nó khi được yêu cầu. Khi bộ điều khiển Contact được thực hiện, nó tự bật lên và đạt đỉnh điểm ở bước tiếp theo để biết nơi cần đi. Bằng cách này, nó hoàn toàn được tách rời và có thể được tái sử dụng ở khắp mọi nơi, và có thể được lồng vào nhau ở mức độ sâu.

1

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn có một hành động được đóng gói gọn gàng bởi bộ điều khiển và bạn muốn đảm bảo hành vi hậu xử lý của nó có thể được định nghĩa động nhất có thể.

Ý tưởng của bạn về chức năng gọi lại rất tốt, nhưng tôi sẽ tiến thêm một bước nữa và đặt nó là Func <>, cho phép bạn sử dụng các bao đóng. Tôi sẽ mở rộng trên ẩn dụ tư vấn của bạn: thay vì chuyển một số điện thoại cho đại diện của bạn, thay vào đó anh ta kết nối lại với văn phòng và nhận được hướng dẫn từ đó. Vẻ đẹp của việc sử dụng các bao đóng là bạn có thể truy cập vào ngữ cảnh gọi trực tiếp từ mã khác ngoài phạm vi; nói cách khác, việc đóng có thể truy cập tất cả của các biến và chức năng trong bộ điều khiển máy chủ.

Khi nhân viên bán hàng của bạn được thực hiện với nhiệm vụ của mình, ông chỉ đơn thuần là mở vali (Func <>) và đạt thành bàn làm việc tại văn phòng để xem có ai đã đặt một mục To-Do trong ngăn kéo văn phòng của ông.

Jon Skeet (cũng trên StackOverflow) có tài nguyên tuyệt vời tại đây: http://csharpindepth.com/articles/chapter5/closures.aspx

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