2013-04-18 43 views
7

Sau khi nhận ra rằng tôi đã bỏ qua hoàn toàn mẫu MVC, tôi đã cố gắng sử dụng khái niệm trong một ứng dụng có dạng xem Swing. Bây giờ tôi đã đọc hầu hết các bài viết về chủ đề của MVC với Swing nhưng vẫn còn hơi bối rối, bởi vì nó quá phức tạp để tôi nắm bắt, và tôi nghĩ rằng tôi cần một số giải thích cơ bản vì vậy tôi không đặt sai con đường.MVC và Swing trong ứng dụng máy tính để bàn

Tôi cũng tự hỏi mức độ phổ biến của việc sử dụng MVC trong các dự án thực tế. Nhiều hướng dẫn trực tuyến dường như bỏ qua bộ điều khiển và kết hợp nó với mô hình, trong khi tôi bị nhầm lẫn bởi khả năng logic kinh doanh của XSTL: Tại sao bạn muốn giải quyết nguồn dữ liệu từ chế độ xem JSP?

Những suy nghĩ sang một bên, câu hỏi đúng đắn của tôi là thế này:

Nếu bạn có một thành phần Swing, sự kiện người nghe ở chỗ lớp Swing nên cập nhật trạng thái của thiết bị nhờ gọi (? Tĩnh có lẽ) phương pháp trong một lớp điều khiển POJO, mà lần lượt nhận được logic kinh doanh thích hợp từ mô hình, được tạo thành bởi phân cấp lớp POJO và sự kiên trì liên quan?

+3

Chào mừng bạn đến với tổ ong. Swing không kết hợp mô hình MVC cho phép "VC" được ảo hóa thành một thành phần duy nhất. Tốt hay xấu là không liên quan, đó chỉ là nó như thế nào. Những gì nó làm là thử và tách dữ liệu khỏi khung nhìn. Có một số trường nghĩ rằng nhà nước bạn nên loại bỏ các yếu tố "kiểm soát" ra khỏi tầm nhìn vào lớp riêng của nó, cá nhân tôi nghĩ rằng điều này chỉ làm tăng sự phức tạp và mời thêm nhiều vấn đề sau đó nó có giá trị - IMHO. Nói chung, chế độ xem/bộ điều khiển của bạn sẽ không bao giờ có thể trực tiếp thay đổi dữ liệu, đó là trách nhiệm của mô hình - IMHO – MadProgrammer

+0

Ah, cảm ơn bạn. Điều này làm cho mọi thứ rõ ràng hơn một chút. Tuy nhiên, bạn sẽ đồng ý rằng nó có ý nghĩa để giới thiệu một bộ điều khiển riêng biệt nếu việc thực hiện GUI có khả năng thay đổi (ví dụ SWT)? Quá tệ Tôi không thể nâng cao nhận xét của bạn - chưa có danh tiếng :) –

+0

Bộ điều khiển riêng sẽ chỉ có ý nghĩa nếu API/khung làm việc theo kiểu tương tự, có một số loại giao diện. Điều đó nói rằng, nếu bạn viết bộ điều khiển của bạn bằng cách sử dụng cùng một mô hình như các mô hình đã được viết (tức là bắt đầu với một giao diện, chuyển sang triển khai trừu tượng và sau đó cho phép triển khai nhiều bê tông), nó sẽ khả thi. Nó sẽ cần phải là một hành động cân bằng được cân nhắc, nhưng thấy như tôi muốn trừu tượng mọi thứ để việc thực hiện không biết với những người sử dụng nó, vâng, tôi sẽ coi đó là một ý tưởng hợp lý – MadProgrammer

Trả lời

10

Tôi đã làm nghề tự do trong một thời gian dài và gần 90% dự án là về Java Swing (ứng dụng dành cho máy tính để bàn). Ngoài ra rất nhiều dự án liên quan đến việc di chuyển từ các ngôn ngữ như Visual Fox Pro sang Java, nó là một nỗi đau, bởi vì phần cứng không nghĩ đến logic đã được thực hiện, phần khó là lấy mã đó là một mớ hỗn độn và biến nó thành thành một mã đẹp mắt theo các thực hành tốt và sử dụng các mẫu thiết kế, đó là lý do tại sao bạn nên tạo một lược đồ hoặc bản đồ trong tâm trí của mình cách bạn có thể tách mã của mình theo các khái niệm về Mô hình, Chế độ xem, Bộ điều khiển.

MVC như đã đề cập sẽ giúp bạn có mã đẹp, dễ bảo trì và dễ đọc, cũng như bạn tuân theo các mô hình lập trình và thực hành tốt.

Xem: Rõ ràng, phần tương tác với người dùng (giao diện người dùng), trong trường hợp Swing, cửa sổ, khung, bảng và tất cả mã liên quan đến các thành phần đồ họa bạn cần cho ứng dụng của mình.

Bộ điều khiển: Khẳng định cốt lõi hoặc logic nghiệp vụ bạn đã thiết lập cho ứng dụng của mình, trong "lớp" này, bạn nên bao gồm chức năng và "cách ứng dụng của tôi sẽ đạt được mục tiêu?".

Mô hình: Liên quan đến dữ liệu bạn quản lý, ví dụ: các thực thể và lớp học đại diện cho dữ liệu bạn muốn quản lý hoặc bảo trì.

Áp dụng MVC không quá khó, nhưng như tôi đã đề cập, đôi khi bạn phải di chuyển mã của bạn từ cấu trúc MVC không áp dụng sang ứng dụng có cấu trúc MVC. Nó dễ dàng hơn để bắt đầu mã hóa bằng cách sử dụng MVC.

Cách tôi quen với việc này là sử dụng maven và tách ứng dụng của tôi thành "mô-đun" nhỏ, tất nhiên, bạn không cần maven, tôi thấy nó hữu ích trong thời điểm đó, nhưng trong mọi trường hợp bạn có thể cố gắng thực hành hoặc làm quen với MVC bằng cách tách ứng dụng của bạn thành các dự án nhỏ, ví dụ:

Java Project 1: application-data-model (chứa tất cả mã liên quan đến quản lý dữ liệu: thực thể, dtos, bean, daos)

Java Project 2: ứng dụng lõi điều khiển (chứa tất cả logic nghiệp vụ và chức năng, bạn có thể sử dụng mẫu mặt tiền ở đây nếu bạn muốn làm cho mã của mình "minh bạch" hơn khi bạn liên quan với chế độ xem của mình)

Java Dự án 3: Ứng dụng-view-ui (chứa tất cả các tấm, khung và các thành phần đồ họa)

Làm việc theo cách này đã giúp tôi (và buộc tôi) để có được sử dụng để tách mã của tôi và giữ một mắt trên những gì thực sự quan trọng đối với dự án tôi đang làm việc. Ví dụ, nếu tôi đang sử dụng mô hình dữ liệu ứng dụng, tôi tập trung vào mô hình dữ liệu, tôi không suy nghĩ về logic nghiệp vụ cũng như giao diện đồ họa.

Giải thích dài, có thể ai đó có thể làm tốt hơn, nhưng hy vọng tôi có thể giúp bạn hoặc ít nhất đã trao cho bạn một bàn tay với điều này.

Trân trọng.

+0

Cảm ơn bạn! Tôi sẽ cần một thời gian để suy nghĩ điều này thông qua trước khi tôi xem xét làm cho nó là câu trả lời chấp nhận mặc dù. Nó có vẻ hợp lý để có logic kinh doanh trong bộ điều khiển, nhưng sự hiểu biết của tôi là đây không phải là một ý tưởng hay và nó phải là một phần của mô hình. –

+1

đừng lo lắng, chúng tôi sẵn sàng trợ giúp. Bạn đã đề cập đến một điểm tốt, và tôi đồng ý với bạn rằng mô hình nên chứa một số logic, nhưng logic đó chỉ nên quan tâm đến việc truy cập dữ liệu và các thực thể bạn xử lý như DAOS. Trong Bộ điều khiển, bạn có thể có các quy trình khác như tính lương, phân bổ trách nhiệm. Và, một lần nữa như bạn đã viết, bộ điều khiển sẽ sử dụng mô hình để quản lý hoặc ánh xạ dữ liệu. Bạn có thể thêm các mẫu bổ sung như mặt tiền (như tôi đã đề cập) để tách biệt thêm một chút logic nghiệp vụ khỏi chế độ xem của bạn. –

+1

@MarceloTataje: Vì vậy, khi tôi so sánh điều này với ứng dụng Java Web điển hình, Bộ điều khiển sẽ được ánh xạ tới lớp Dịch vụ, Mô ​​hình đến DAO và lớp Xem tới Web chính xác? Tôi yêu cầu điều này vì tôi sẽ chuyển đổi dự án ứng dụng web của tôi sang ứng dụng máy tính để bàn Java. –

3

Firs URL cho sự hiểu biết cơ bản của MVC

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

Bây giờ cách tiếp cận để thực hiện nó trong các ứng dụng Swing. Đừng nhầm lẫn với chức năng điều khiển với chức năng của người nghe.

  1. Điều khiển giao diện người dùng và trình nghe được đính kèm với chúng phải được xác định trong các lớp chế độ xem của bạn.
  2. Trên mọi sự kiện, bất cứ khi nào bạn cần gọi một logic nghiệp vụ, thì bạn cần phải gọi lớp điều khiển. Giống như tìm nạp một số giá trị từ cơ sở dữ liệu.
  3. Lớp điều khiển nên nói chuyện với mô hình của bạn để tìm nạp dữ liệu và thao tác nếu cần.
  4. Các lớp mô hình sẽ hoạt động trên dữ liệu.

Ý tưởng sử dụng MVC là giảm mã dự phòng và mã dễ quản lý hơn. Vì vậy, nếu bạn đang làm một số tính toán/thao tác thì những người có thể được chuyển đến Bộ điều khiển. Bộ điều khiển có thể được gọi từ các chế độ xem khác nhau yêu cầu cùng một nội dung. Tương tự, mô hình có thể được sử dụng bởi nhiều bộ điều khiển để tìm nạp dữ liệu.

+0

Tôi nghi ngờ đây là điều được gọi là bộ điều khiển dày. Tôi đã nhìn thấy một số ý kiến ​​nói rằng bộ điều khiển nên càng mỏng càng tốt, vì vậy tôi nghĩ rằng tất cả mọi thứ có thể được xử lý trong mô hình nên được xử lý ở đó. Có lẽ tôi vẫn còn trong trạng thái bối rối nhưng sẽ đọc nhiều hơn một chút trước khi tôi chấp nhận/upvote câu trả lời của bạn. –

+0

Vì vậy, bạn sẽ nói dòng suy nghĩ sau là sai: "Chúng tôi nhanh chóng phát hiện ra rằng sự phân chia này không hoạt động tốt trong điều kiện thực tế bởi vì các bộ phận quan sát và bộ điều khiển của một thành phần yêu cầu ghép nối chặt chẽ (ví dụ, nó rất khó khăn để viết một bộ điều khiển chung mà không biết chi tiết cụ thể về chế độ xem). Vì vậy, chúng tôi đã thu gọn hai thực thể này thành một đối tượng giao diện người dùng (giao diện người dùng) duy nhất, "(http://www.oracle.com/technetwork/java/ architecture-142923.html) –

+1

Tôi đồng ý rằng nó id khó để đạt được mô hình MVC tinh khiết. Đó là chủ yếu bởi vì nó hoạt động trên mô hình người nghe. Nhưng tôi vẫn tin rằng rất nhiều mã có thể được chuyển đến bộ điều khiển nếu không phải tất cả. Trong ngắn hạn nếu bạn yêu MVC, bạn sẽ có thể tuân thủ nó càng gần càng tốt :-) –

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