Định nghĩa
Đảo ngược kiểm soát là một mô hình thiết kế với mục tiêu giảm nhận thức về việc triển khai cụ thể từ mã khung ứng dụng và cung cấp thêm quyền kiểm soát cho các thành phần cụ thể của miền trong ứng dụng của bạn. Trong một hệ thống được thiết kế từ trên xuống truyền thống, luồng logic của ứng dụng và nhận thức phụ thuộc chảy từ các thành phần hàng đầu, các thành phần được thiết kế trước, đến các thành phần được thiết kế cuối cùng. Như vậy, đảo ngược kiểm soát là một sự đảo ngược gần như theo nghĩa đen của kiểm soát và nhận thức phụ thuộc trong một ứng dụng.
Nội dung phụ thuộc là một mẫu được sử dụng để tạo các thể hiện của các lớp mà các lớp khác dựa vào mà không biết tại thời điểm biên dịch triển khai nào sẽ được sử dụng để cung cấp chức năng đó.
Làm việc cùng nhau
Đảo ngược điều khiển có thể sử dụng phép nội xạ phụ thuộc vì cần một cơ chế để tạo ra các thành phần cung cấp chức năng cụ thể. Các tùy chọn khác tồn tại và được sử dụng, ví dụ như trình kích hoạt, phương thức xuất xưởng, v.v., nhưng các khung công tác không cần tham chiếu các lớp tiện ích đó khi các lớp khung có thể chấp nhận phụ thuộc mà chúng cần.
Ví dụ
Một ví dụ về các khái niệm này tại nơi làm việc là khung trình cắm trong Reflector . Các trình cắm có rất nhiều quyền kiểm soát hệ thống mặc dù ứng dụng không biết gì về các trình cắm trong thời gian biên dịch. Một phương thức duy nhất được gọi trên mỗi trình cắm đó, Khởi tạo nếu bộ nhớ phục vụ, chuyển giao quyền điều khiển cho trình cắm. Khung không biết họ sẽ làm gì, nó chỉ cho phép họ làm điều đó. Kiểm soát đã được lấy từ ứng dụng chính và được trao cho thành phần thực hiện công việc cụ thể; đảo ngược kiểm soát.
Khung ứng dụng cho phép truy cập vào chức năng của nó thông qua nhiều nhà cung cấp dịch vụ. Một trình cắm thêm được cung cấp các tham chiếu đến các nhà cung cấp dịch vụ khi nó được tạo. Các phụ thuộc này cho phép trình cắm thêm các mục menu riêng của nó, thay đổi cách hiển thị các tệp, hiển thị thông tin của chính nó trong các bảng thích hợp, v.v. Vì các phụ thuộc được truyền qua giao diện, việc triển khai có thể thay đổi và các thay đổi sẽ không phá vỡ mã miễn là hợp đồng vẫn còn nguyên.
Vào thời điểm đó, một phương thức xuất xưởng đã được sử dụng để tạo các trình cắm bằng cách sử dụng thông tin cấu hình, sự phản chiếu và đối tượng Trình kích hoạt (ít nhất là trong .NET). Ngày nay, có các công cụ, MEF cho một, cho phép phạm vi tùy chọn rộng hơn khi tiêm phụ thuộc bao gồm khả năng khung ứng dụng chấp nhận danh sách bổ trợ làm phụ thuộc.
Tóm lược
Mặc dù các khái niệm này có thể được sử dụng và cung cấp các lợi ích một cách độc lập, cùng với nhau, chúng cho phép viết mã linh hoạt, có thể sử dụng lại và kiểm tra được nhiều hơn. Như vậy, chúng là những khái niệm quan trọng trong việc thiết kế các giải pháp hướng đối tượng.