Có phải là một thực hành tốt để gọi một chức năng Bộ điều khiển từ Bộ điều khiển khác?


23

Tôi gặp trường hợp tôi đang xử lý logic tìm kiếm trong một bộ điều khiển và tôi đang tạo một số dữ liệu dựa trên các tìm kiếm và trả về dưới dạng thống kê.

Là một thực hành tốt gọi một chức năng điều khiển từ một bộ điều khiển khác? Hoặc hai bộ điều khiển không bao giờ nên 'nói chuyện'?

Câu trả lời:


24

Điều này khá lạ, mặc dù câu trả lời phụ thuộc vào ngôn ngữ / khung bạn sử dụng, vì các ngôn ngữ / khung khác nhau có cách tiếp cận khác nhau của MVC.

Nói chung, bạn sẽ không sử dụng một bộ điều khiển từ một bộ điều khiển khác kể từ:

  • Bộ điều khiển thường trả về kết quả của một loại dự định sẽ được sử dụng bởi khung MVC. Kết quả này chứa rất nhiều thông tin mà bạn, với tư cách là người gọi, không cần (chẳng hạn như tên của chế độ xem) và không phải lúc nào cũng dễ dàng truy cập thông tin mà bạn có thể quan tâm (trong trường hợp của bạn là mô hình, nếu tôi đoán đúng).

  • Bộ điều khiển không dễ dàng khởi tạo từ mã doanh nghiệp, vì chúng thường cần một số lượng thông tin về yêu cầu HTTP và bối cảnh. Tất cả thông tin này dự kiến ​​sẽ được thông qua bởi khung MVC.

Quan trọng hơn, nếu bạn cần một loạt kết quả tìm kiếm trong hai bộ điều khiển, một bộ điều khiển hiển thị kết quả cho người dùng cuối, một bộ khác tạo số liệu thống kê, chỉ cần đặt logic tìm kiếm vào lớp doanh nghiệp của bạn (nơi nó thuộc về vị trí đầu tiên, nhân tiện), và giữ cho bộ điều khiển của bạn nhỏ nhất có thể.

Vai trò của bộ điều khiển, trong MVC, là phối hợp quy trình:

  • Nhận đầu vào có liên quan từ yêu cầu,
  • Ủy quyền cho người xác nhận nhiệm vụ xác nhận / vệ sinh đầu vào,
  • Gọi các phương thức liên quan của lớp nghiệp vụ,
  • Cung cấp cho khung MVC mô hình kết quả và khung nhìn.

Vai trò của bộ điều khiển không phải là để đối phó với logic kinh doanh.

Khi mã được chuyển sang lớp nghiệp vụ, bạn có thể cung cấp giao diện tìm kiếm có thể được sử dụng lại một cách rõ ràng, đơn giản, không giống như một bộ điều khiển được sử dụng từ bộ điều khiển khác.


Xin chào, Cảm ơn bạn đã phản hồi của bạn. Giả sử rằng tôi đã chuyển logic tìm kiếm sang lớp nghiệp vụ, đâu là nơi tốt nhất để đặt giao diện tìm kiếm? Tôi đang sử dụng Laravel.
IAmJulianAcosta

Thật không may, tôi chưa bao giờ sử dụng Laravel. Hơn nữa, tôi tưởng tượng rằng câu trả lời sẽ phụ thuộc nhiều hơn vào kiến ​​trúc ứng dụng của bạn, hơn là khung.
Arseni Mourzenko

Giả sử bạn ở dưới thư mục http chính xác một cấp với dự án gốc của bạn. Bạn có thể tạo thư mục có tên hợp đồng tại đây và tất cả các tệp của bạn hoạt động như giao diện bạn có thể đặt tại đây
Faris Rayhan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.