2009-02-24 26 views
7

Tôi có một câu hỏi thực sự áp dụng cho bất kỳ khuôn khổ MVC nào, tôi đang sử dụng Zend Framework MVC.Bạn nên đặt tên cho bộ điều khiển của mình trong MVC? Khi nào bạn nên tạo một cái mới?

Khi nào chính xác bạn nên tạo bộ điều khiển mới? Lớp điều khiển xác định chính xác điều gì?

Tôi đã tạo một số ứng dụng với MVC, dần dần trở nên có thể sử dụng lại nhiều hơn, nhưng tôi đã luôn vật lộn với việc đặt tên các lớp Bộ điều khiển. Đối với hầu hết các phần nó phù hợp với bất kỳ yêu cầu URL có, do đó, kinh doanh/front end logic. Nhưng trong một số trường hợp, nó có vẻ hoàn toàn tùy ý.

Có ai có một số chẩn đoán/nguyên tắc để theo dõi không? Có vẻ như với tất cả các hype về MVC, đặc biệt là với PHP, có rất ít dữ liệu về các công ước và chẩn đoán thực tế. Vì nó khá dễ dàng để tạo ra một ứng dụng MVC không tổ chức ...

Trả lời

7

Tôi thường có một bộ điều khiển cho từng nhóm chức năng hợp lý. Thường thì điều này sẽ tương ứng với một bộ điều khiển trên mỗi mô hình, đôi khi không.

Hãy tưởng tượng bạn đang tạo danh mục trực tuyến đơn giản hiển thị danh sách các danh mục khi người dùng chọn danh mục, hiển thị danh sách sản phẩm từ danh mục đó, cùng với bảng điều khiển quản trị cho các hoạt động CRUD về danh mục và sản phẩm. Tôi có hai mô hình (CategoryModelProductModel). Tôi có một bộ điều khiển tạo danh sách danh mục cho giao diện người dùng và một bộ điều khiển khác đã tạo danh sách sản phẩm (ví dụ: CategoryControllerProductController). Sau đó tôi có bộ điều khiển cho các danh mục và sản phẩm ở mặt sau (AdminCategoryControllerAdminProductController). Hai bộ điều khiển cuối cùng sẽ xử lý các hoạt động danh sách/thêm/chỉnh sửa/xóa/xem cho các mô hình tương ứng của chúng. Nếu bạn nghĩ rằng mặc dù cấu trúc URL của bạn và đặt các chức năng liên quan đến các url có liên quan, thì cấu trúc bộ điều khiển của bạn sẽ thường khớp với cấu trúc URL của bạn. Trên thực tế, một số khung công tác (ví dụ: CodeIgniter) yêu cầu tuyến đường dựa trên tên của bộ điều khiển là hành vi mặc định.

Đối với những gì xảy ra trong bộ điều khiển, tôi làm việc với ý tưởng rằng Mô hình là để truy cập dữ liệu và bọc và ẩn cấu trúc cơ sở dữ liệu. Logic chẳng hạn như "gán thời gian hiện tại cho completion_date khi trạng thái được đặt thành 'hoàn thành'" là một mô hình phù hợp tuyệt vời.

Chế độ xem chứa toàn bộ bản trình bày của bạn. Bộ điều khiển/Mô hình không được tạo hoặc xử lý HTML. Các quyết định như 2 cột hoặc 3 thuộc về lượt xem. Logic trong quan điểm nên được giới hạn ở đó là cần thiết để tạo ra đầu ra nhìn thấy được. Nếu bạn thấy mình muốn truy vấn cơ sở dữ liệu từ một khung nhìn, có lẽ bạn đang đặt quá nhiều logic vào khung nhìn.

Bộ điều khiển dành cho những gì còn lại. Nói chung điều đó có nghĩa là, xác thực đầu vào, gán dữ liệu biểu mẫu cho các mô hình, chọn các chế độ xem phù hợp và khởi tạo các mô hình cần thiết để xử lý yêu cầu.

+0

Cảm ơn .... đó là khá nhiều những gì tôi đang làm. Một điều tôi đang cố gắng làm là đưa thêm logic vào lớp mô hình. Tôi sử dụng các đối tượng mô hình propel, và đã nghĩ rằng việc xác nhận hợp lệ nên đi vào lớp mô hình. Bộ điều khiển chỉ thiết lập dữ liệu trong mô hình ... – AndreLiem

+1

Một số nhà phát triển muốn đặt tất cả xác thực vào Mô hình. Tôi thấy rằng xác thực biểu mẫu được thực hiện tốt hơn trong Bộ điều khiển (vì nó được kết hợp chặt chẽ với Giao diện người dùng) và xác thực loại dữ liệu cơ bản (ví dụ: hạn chế trường enum thành các giá trị nhất định) hoạt động tốt trong mô hình. –

0

Đối với hầu hết các phần, tôi làm theo mẫu điều khiển cho mỗi mô hình. Tôi có một vài bộ điều khiển có thể phục vụ nhiều mô hình (như bộ điều khiển quản trị phục vụ một số mô hình quản trị), nhưng quy tắc chung là một bộ điều khiển cho mỗi mô hình kinh doanh.

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