Như tôi biết trong việc thực hiện tiêu chuẩn của MVC, chúng tôi vượt qua Bộ điều khiển và Mô hình cho Chế độ xemMVC - tôi có cần sử dụng Bộ điều khiển trong Chế độ xem không?
Nhưng Im hơi không đồng ý với ý tưởng này. Tôi không muốn quan điểm của tôi để biết về cả hai bộ điều khiển và mô hình (oh no. Có thể đôi khi xem nhu cầu mô hình, nhưng tôi chắc chắn rằng ông có thể sống mà không có kiến thức về bộ điều khiển)
Theo ý kiến của tôi nên quản lý Xem và mô hình, và Model không cần biết về bộ điều khiển và khung nhìn; xem doesnt cần phải biết điều khiển (Tôi không loại trừ mô hình vì một số triển khai quan điểm cần phải biết về mô hình để lắng nghe những thay đổi trong mô hình). Ý tưởng của tôi là chế độ xem không cần biết về bộ điều khiển.
1. Dưới đây là một ví dụ:
public class MyView implements ButtonClickListener {
private Controller myController;
private Button myButton;
// I commented out the model because we dont need it now
// we are talking about using controller in the view
public MyView(Controller c/*, Model m*/) {
myController = c;
myButton = new Button(); // lets say that it is "register" button
myButton.setOnButtonClickListener(this);
}
public void setRegisterButtonText(String text) {
myButton.setText(text);
}
@Override
public void onClick() {
myController.tellToModelToDoSomething();
}
}
Và Bộ điều khiển:
public MyController implements Controller {
private Model model;
private View view;
public MyController(Model model) {
this.model = model;
this.view = new MyView(this);
}
public void tellToModelToDoSomething() {
model.doSomeActions();
}
}
2. Và bây giờ làm thế nào để tôi thấy thực hiện điều này mà không đi qua bộ điều khiển:
Xem của tôi:
public class MyView {
private Button myButton;
public MyView() {
myButton = new Button();
}
public void setRegisterButtonText(String text) {
myButton.setText(text);
}
public void setOnRegisterButtonClick(final Command command) {
myButton.setOnButtonClickListener(new ButtonClickListener() {
@Override
public void onClick() {
command.execute();
}
});
}
}
"Command" giao diện:
public interface Command {
void execute(/*also can handle extra params*/);
}
Và Bộ điều khiển:
public MyController implements Controller {
private Model model;
private View view;
public MyController(Model model) {
this.model = model;
this.view = new MyView();
view.setOnRegisterButtonClick(command);
}
public void tellToModelToDoSomething() {
model.doSomeActions();
}
private Command command = new Command() {
public void execute() {
tellToModelToDoSomething();
}
};
}
Vậy tại sao tôi nghĩ rằng việc sử dụng bộ điều khiển trong giao diện LÀ KHÔNG TỐT:
Chúng tôi đang trộn bộ điều khiển và xem triển khai, tạo phụ thuộc mới.
Ngoài ra, tôi nghĩ rằng Chế độ xem chỉ nên chứa VIEWS và hoạt động với chúng (và sử dụng bộ điều khiển và một số phương pháp của anh ta đã có dạng logic).
Trong chế độ xem ví dụ đầu tiên, hãy cho bộ điều khiển biết phải làm gì. Bạn có đồng ý không? Có vẻ như điều khiển xem bộ điều khiển!
Trong bộ điều khiển ví dụ thứ hai kiểm soát phải làm gì và chỉ nói với quan điểm phải làm gì nếu một số nút (chỉ xem biết nút gì nó sẽ được) nhấp
tôi luôn luôn sử dụng các chương trình thứ hai, nhưng sau khi đọc một cuốn sách mới về mvc, mà nói rằng chúng ta cần phải vượt qua bộ điều khiển để xem, tôi là một chút bối rối.
Bạn có thể vui lòng giúp tôi hiểu tại sao tôi sai và cho tôi xem một số ví dụ?
tôi tin rằng bộ điều khiển và chế độ xem không tương tác trực tiếp. Họ tương tác mặc dù mô hình. do đó, mô hình biết cả bộ điều khiển và chế độ xem nhưng chế độ xem và bộ điều khiển không biết lẫn nhau. – gigadot
đã nói điều đó. MVC có nhiều biến thể và sự thực tế khác nhau trong thực tế. – gigadot
bạn đúng .., và làm thế nào bạn nghĩ trong ví dụ này, việc thực hiện nào tốt hơn? – pleerock