c ++ Model View Presenter: Xây dựng người trình bày ở đâu?


8

Tôi đang sử dụng mẫu Trình bày mẫu xem (MVP) như được mô tả trong giấy Hộp thoại khiêm tốn (pdf) với dự án MFC. Tôi chắc chắn rằng vấn đề này giống với hầu hết các bộ công cụ GUI.

Điều khiến tôi bận tâm là quan điểm cụ thể (nghĩa là lớp hộp thoại) đang tạo ra không chỉ người trình bày mà còn cả các dịch vụ mà người trình bày cần. Điều đó có bình thường không? Tại sao quan điểm cần biết những dịch vụ mà người trình bày cần? Điều tôi đang nghĩ là tôi nên phụ thuộc vào người thuyết trình vào lớp hộp thoại.

Điều khiển chính cho ứng dụng là một lớp có nguồn gốc từ CWinApp. Vì vậy, tôi nên xây dựng các dịch vụ và người trình bày trong lớp này và sau đó đưa chúng vào lớp hộp thoại?

Mặc dù làm thế nào tôi phụ thuộc vào việc chèn người trình bày vào lớp hộp thoại khi người trình bày cần một tham chiếu đến lớp khung nhìn trong hàm tạo của nó?

MyPresenter(IView *view, MyService *service);

Ngoài ra, nếu cửa sổ chính xuất hiện một cửa sổ bật lên, thì các chi tiết cho người trình bày và dịch vụ của cửa sổ đó sẽ được xây dựng ở đâu?

Vì đây là C ++, tôi không nghĩ rằng tôi quan tâm đến bất kỳ loại khung DI nào.

CẬP NHẬT

Một ý tưởng tôi có là xây dựng người trình bày với chế độ xem null, hàm tạo đưa người trình bày vào lớp hộp thoại và sau đó, trong hàm tạo của lớp hộp thoại gọi một SetView(IView *view)phương thức trên người trình bày với thisnơi thissẽ là lớp hộp thoại (xuất phát từ IView ). Vì thế:

MyApp::Start()
{
  SomeService *service = new SomeService();
  MyPresenter *presenter = new MyPresenter(null, service);
  MyDialog *dialog = new MyDialog(presenter);
  ...
}

MyDialog::MyDialog(MyPresenter *presenter):
 presenter_(presenter)
{
  presenter_->SetView(this);
}

Có vẻ hơi ít nhưng giữ cho việc xây dựng dịch vụ ra khỏi lớp Hộp thoại. Chế độ xem null có vẻ hơi nguy hiểm. Một cách khác là thực sự xây dựng một lớp NullView có các thân phương thức trống và sau đó chuyển nó vào hàm tạo của người trình bày.

Câu trả lời:


1

Có lẽ một giải pháp tốt hơn là sử dụng một lớp nhà máy hoặc phương pháp biết cách xây dựng một người thuyết trình? Khung nhìn sẽ tự chuyển sang phương thức xuất xưởng và lưu trữ giá trị trả về trong thành viên người trình bày.

Điều này tách riêng thông tin về cách người thuyết trình được xây dựng (phụ thuộc vào dịch vụ hoặc bất cứ điều gì) từ chính chế độ xem.


0

Tôi nghĩ ý tưởng ban đầu của bạn (xây dựng người thuyết trình và dịch vụ bên trong khung nhìn) không có hại. Chúng tôi phải tự hỏi lợi ích của việc tiêm và tôi không thấy bất kỳ.

Bằng cách tách chế độ xem thực tế thành chế độ xem trừu tượng và người trình bày, bạn đã đạt được sự tách biệt các mối quan tâm. Và bạn có thể nhận được lợi ích từ thành tích, ví dụ, bằng cách thử nghiệm người trình bày với chế độ xem nhồi nhét hoặc chế giễu. Vậy tại sao bạn muốn đưa người trình bày vào cái nhìn cụ thể? Tôi không thấy cần thiết.

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.