2012-06-07 32 views
15

Nếu bạn muốn biết thêm chi tiết, vui lòng cho tôi biết hoặc tham khảo các dòng cuối cùng của câu hỏi này. Tôi đã đọc rất nhiều và tôi cảm thấy tôi đang biến một cái gì đó đơn giản thành một cái gì đó phức tạp và tôi vẫn gặp khó khăn ở đây và ở đó, vì vậy có lẽ bạn có thể giúp tôi trong những điểm rất cụ thể.Làm thế nào để thực hiện đúng MVC trong Java với Swing?

Tôi đang sử dụng Netbeans IDE 7 và JDK 7 và không có khung công tác. Cửa sổ đầu tiên là một JFrame và tất cả các cửa sổ khác là JDialogs với modal = true.

Câu hỏi:

  1. Làm thế nào để thực hiện một cách chính xác các mô hình MVC với đu? Từ những ý tưởng dưới đây Cái nào tốt hơn: (A) hoặc (B)? Hoặc có lẽ một cái khác ... Tại sao nó tốt hơn?

    (A) chính:

    MyModel model 
    MyView view(model) 
    

    MyView:

    MyController(this, model) 
    

    (B)
    chính:

    MyModel model 
    MyView View 
    MyController controller(view, model) 
    
  2. khi tôi nhấp jbutton1 trong mainframe tôi cần nó để mở SettingsFrame để chỉnh sửa cài đặt. Tôi nên khởi tạo Chế độ xem, Mô hình và Bộ điều khiển của SettingsFrame ở đâu? Trong MainFrame Controller?

  3. Về mặt tổ chức và triển khai MVC, tôi nên xử lý các tính năng cụ thể hơn như thế nào (dường như) thiếu một hoặc hai trong số các chân "MVC" (Mô hình hoặc Chế độ xem hoặc Bộ điều khiển)? Tôi có nên tạo các lớp trống cho họ không?

    a. The implementation of a TrayIcon 
    b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files) 
    c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file) 
    d. My own implementation of TableModel 
    e. json 
    
  4. Cách giữ đúng và sử dụng đối tượng có cài đặt thông qua toàn bộ ứng dụng? Tôi sẽ cần thông tin của nó ở những nơi khác nhau (Views, Models, Controllers) nhưng nó có thể bị thay đổi bởi người dùng trong suốt thời gian chạy). Nó là một ý tưởng tốt để làm cho mô hình này một singleton?

  5. Tôi nên làm gì khi:

    a. View needs some data from the Model? 
    What I'm doing: using the reference of Model which I keep in the View 
    b. View needs some data from the Controller? 
    What I'm doing: using the reference of Controller which I keep in the View 
    c. Model needs some data from the Controller? 
    Still didn't happen but I have no idea how to do correctly 
    d. Model needs some data from the View? 
    What I'm doing: pulling all my hair from my head... 
    e. Controller needs some data from the View? 
    What I'm doing: using the reference of the View which I keep in the Controller 
    f. Controller needs some data from the Model? 
    What I'm doing: using the reference of the Model which I keep in the Controller 
    g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController? 
    What I'm doing: thinking of jumping from the highest building... 
    
  6. Bất kỳ gợi ý về làm thế nào để biết nếu tôi thực hiện MVC một cách chính xác? Tôi có nên xử lý dữ liệu lớn trong Model hoặc Controller không?

  7. Tôi cũng đang sử dụng một DAO, những gì tôi đang làm là: mô hình của tôi có một tải MyModel

    ArrayList()

    phương pháp mà tạo ra một thể hiện của DAO và trả về ArrayList of Models được trả về bởi DAO, và sau đó đôi khi tôi xử lý ArrayList of Models này trong Model và đôi khi tôi cho phép Controller xử lý nó. Đây có phải là một thực hành tốt hay có cách nào tốt hơn không? Theo quy trình tôi có nghĩa là: lặp qua ArrayList và lấy dữ liệu từ các mô hình.

  8. Tôi có PasswordCheck jDialog để hạn chế quyền truy cập vào một số Chế độ xem.Làm thế nào tôi có thể tái sử dụng nó trong điều khoản của MVC, để tôi có thể sử dụng cùng một hộp thoại PasswordCheck cho phép/hạn chế quyền truy cập vào các Chế độ xem khác nhau mà không làm một mớ hỗn độn trong mã?

  9. Bất kỳ mẹo, gợi ý, ý tưởng, đề xuất nào khác?

Bối cảnh: Tôi đang cần để phát triển một phần mềm Java Swing MVC trong một thời gian ngắn, mặc dù theo mặc định tôi không phải là một nhà phát triển Java và không nên sử dụng để thực hiện các mô hình MVC, đặc biệt trong Java (Tôi nhận được ý tưởng nhưng đôi khi nó thiếu kiến ​​thức để thực hiện mối quan hệ giữa các lớp). Các ứng dụng về cơ bản là một màn hình cho các tập tin địa phương/trực tuyến với một JTable trong khung chính để hiển thị dữ liệu này. Tôi đang sử dụng API WatchService mới để theo dõi các tệp cục bộ và lưu thông tin của chúng trong cơ sở dữ liệu h2 bằng DAO và chúng tải lại dữ liệu này trong khung chính jtable. Tôi cũng phải thông báo cho người dùng về các tệp mới (mà tôi đang sử dụng TrayIcon). Đối với các tập tin trực tuyến theo dõi/tải lên/tải xuống tôi đang sử dụng HttpsUrlConnection và json. Nó cũng có thể cho phép tùy chỉnh Cài đặt.

Cảm ơn bạn đã dành thời gian và trợ giúp.

Trả lời

7

Hãy xem Sun's (Oracle's) suggestions. Một đơn giản hóa, bạn có thể có mỗi thành phần (mô hình, xem, bộ điều khiển) đăng ký với một thành phần ứng dụng cấp cao nhất để cung cấp một điểm tham chiếu chứ không phải là tham chiếu riêng lẻ giữa mỗi thành phần (A hoặc B) của bạn. Bài viết tôi trích dẫn cung cấp ý tưởng cho thiết kế đẩy và kéo; Tôi khuyên bạn nên đẩy như một cách tiếp cận hiện đại phổ biến hơn. Tiết lộ: Tôi có kinh nghiệm với Java và MVC nhưng không phải MVC trong Swing mỗi lần.

nơi tôi nên khởi tạo Chế độ xem, Mô hình và Bộ điều khiển của khung cài đặt?

Chắc chắn, có hoặc trong thành phần ứng dụng cấp cao nhất.

Tôi nên xử lý các tính năng cụ thể hơn như thế nào (dường như) thiếu hoặc hai trong số các "chân" MVC (Mô hình hoặc Chế độ xem hoặc Bộ điều khiển)?

Tôi sẽ triển khai các phần GUI chỉ làm thư viện GUI của riêng bạn. Và các thuật toán/dịch vụ hoàn toàn là một thư viện dịch vụ.

Tôi có nên xử lý dữ liệu lớn trong Mô hình hoặc Bộ điều khiển không?

Thuật toán xử lý dữ liệu sẽ vừa khít trong bộ điều khiển hoặc thậm chí thư viện dịch vụ; mô hình của bạn không nên làm nhiều việc xử lý ở tất cả ngoài khả năng chuyển đổi hoặc xác thực kiểu dữ liệu.

Cách giữ đúng và sử dụng đối tượng có cài đặt thông qua toàn bộ ứng dụng?

Xem ghi chú của tôi khi đăng ký; một singleton có thể thích hợp.

+0

+1, tôi thích ý tưởng được trình bày nhiều như tôi thích liên kết, cũng sẽ giúp tôi với nỗ lực của mình :-) +1 cho câu hỏi, giải thích rất tốt, tôi là người đầu tiên upvote cả hai: -) –

+0

Cảm ơn bạn đã trả lời.Bạn có ý gì khi "xem ghi chú của tôi khi đăng ký"? Tôi đã nhìn thấy đề xuất của mặt trời trước đây nhưng, vì bạn đã đề xuất nó, tôi sẽ đọc lại nó một cách chặt chẽ và cẩn thận hơn, và cố gắng giải quyết những nghi ngờ của tôi. Tôi cũng upvoted nó. – dcr

+4

+1 Xem thêm [ví dụ] (http://stackoverflow.com/a/3072979/230513), theo sau [phác thảo] (http://stackoverflow.com/a/2687871/230513) tương tự như sơ đồ trích dẫn. – trashgod

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