Im thiết kế một khuôn khổ MVC nhưng tôi không biết nơi tôi nên đặt các lớp tiện ích của tôi. Tôi đọc ở đâu đó nói rằng các lớp tiện ích là Lớp Mô hình. Dòng suy nghĩ này có đúng hay là một số loại riêng biệt của lớp?Lớp tiện ích có thể là lớp Mô hình trong khuôn khổ MVC không?
Trả lời
Tùy thuộc vào những gì các lớp Tiện ích này đang thực hiện. Ý tưởng chính của MVC là tách lớp trình bày (V và C) khỏi ứng dụng còn lại (M). Nếu các lớp Utility của bạn xử lý những thứ liên quan đến lớp presentational, hãy đặt chúng trong một gói thích hợp, ví dụ như ViewHelpers hoặc InputHandlers. Nếu các hàm Utility có liên quan đến bất kỳ thứ gì khác, hãy xem lớp nào trong mô hình của bạn phù hợp nhất, ví dụ: DataAccess Utilities đi vào gói DAO trong khi MailHelper có thể đi vào gói Dịch vụ, v.v.
Nếu nó không phải là một đại diện của dữ liệu được lưu trữ, thì đó có thể không phải là một lớp Mô hình. Thậm chí sau đó, nếu nó vẫn đại diện cho dữ liệu được lưu trữ của một số loại, nhưng hoạt động hoàn toàn khác với phần còn lại của Mô hình của bạn, nó có thể không thuộc về phần còn lại của Mô hình, anyway.
Chức năng tiện ích có thể là một phần của bất kỳ lớp nào mà chúng là tiện ích, hoặc là Mô hình, Chế độ xem hoặc Bộ điều khiển. Nếu chúng chung chung hơn một chút, thì chúng sẽ sống "bên ngoài" thiết kế MVC.
Mô hình không chỉ là cơ sở dữ liệu! – Gordon
Bạn biết đấy, khi tôi lần đầu tiên bắt đầu trên SO, tôi đã gặp phải khá nhiều lý lẽ và sự nhầm lẫn về những gì các lớp Model đã làm trong MVC. Sau một thời gian, tôi đã nhận ra rằng có rất nhiều cách sai lầm để làm MVC. Đây là một chút sau khi tôi bắt đầu duy trì một codebase cũ đã làm MVC trong ít nhất ba cách khác nhau, xấu. Tuy nhiên, một điều chắc chắn nhất là Mô hình ** đã mô hình hóa các đối tượng dữ liệu được lưu trữ **. Điều này không có nghĩa nó chỉ là một lớp ORM, nhưng họ nên biết cách họ tương tác với nhau và cách lưu trữ và truy xuất dữ liệu của họ. – staticsan
Lớp mô hình có thể chứa mã truy cập dữ liệu, logic ứng dụng của bạn. do đó, nó là okay để đặt trong mô hình.
Cách tiếp cận tốt nhất là tạo một thư mục Tiện ích trong thư mục Mô hình và đặt lớp tiện ích ở đó.
Tôi đọc một cuốn sách mà nó nói rằng Mô hình là các lớp học từ một lớp kinh doanh và/hoặc các tiện ích. Ý tưởng của việc có một ViewHelper có vẻ giống như làm cho một lai của bộ điều khiển và xem. Bạn nghĩ sao? – rix501
@ rix501 Bộ điều khiển xử lý đầu vào của người dùng từ giao diện người dùng và yêu cầu đại biểu cho mô hình. [ViewHelper] (http://java.sun.com/blueprints/corej2eepatterns/Patterns/ViewHelper.html) không nên xử lý thao tác nhập của người dùng. Ý tưởng chính là phân tách bất kỳ logic nào cần thiết cho Chế độ xem để hoàn thành việc hiển thị khỏi mẫu xem của bạn. Sự khác biệt mà bạn đọc trong cuốn sách là chính xác. Thuật ngữ Utilities chỉ là mơ hồ mặc dù. – Gordon