Một bộ điều khiển trên mỗi trang hoặc nhiều trang trong một bộ điều khiển?


16

Tôi chỉ muốn một số lời khuyên liên quan đến cách làm việc của MVC. Tôi đang sử dụng codeigniter và tôi đã tự hỏi liệu có tốt hơn khi có một bộ điều khiển trên mỗi trang cho một trang web hoặc có một bộ điều khiển cho tất cả các trang không?

Giả sử tôi có một trang web đơn giản nơi bạn có thể truy cập trang chủ, đăng nhập, tạo tài khoản và liên hệ với quản trị viên.

  1. Sẽ tốt hơn nếu có các bộ điều khiển này: frontend (index), đăng nhập, tài khoản, liên hệ HOẶC có một bộ điều khiển được gọi là frontend hoặc bất cứ điều gì với các hành động như đăng nhập, createdAccount, contact?

  2. Khi nào bạn biết nếu sử dụng một bộ điều khiển trong một tình huống thì tốt hơn?


Tôi đã luôn sống theo tín ngưỡng: Một Người điều khiển để cai trị tất cả, và trong Bóng tối ràng buộc họ. (Không thực sự, nhưng tôi thích âm thanh của nó. :-)
Peter Rowell

Câu trả lời:


16

Tốt hơn là nên có bộ điều khiển trên mỗi đơn vị logic, ví dụ AccountContoder (đăng nhập, đăng ký), PagesContoder (home, contact), Backend -> PagesContoder (tạo, chỉnh sửa, xóa), UsersContoder (tạo, chỉnh sửa, xóa), v.v.


Làm thế nào bạn sẽ đại diện cho một trang web với các lĩnh vực này: nhà, đăng nhập, tài khoản, liên hệ. Bạn sẽ sử dụng 2 bộ điều khiển như ví dụ của bạn? Nếu bạn truy cập localhost / nó sẽ mở homecontler thì nếu bạn truy cập localhost / contact theo lý thuyết thì có nên chuyển sang trình điều khiển contact không? và những gì bạn có nghĩa là phụ trợ?
Rushino

Nó phụ thuộc vào cấu trúc của các trang và bạn có bao nhiêu trang. Tôi sẽ tạo HomeContoder (home, contact) hoặc PagesContoder (home, contact OR chi tiết (id)). Ví dụ: trong ASP.NET MVC, bạn có HomeContoder mặc định với trang Home và About.
Santas

Tôi thích phương pháp này. Ngoài ra, ClientControll (hoặc bất cứ điều gì bạn muốn gọi nó) cho các Hành động được gọi qua Jquery.Ajax không dành riêng cho bất kỳ phần cụ thể nào trong ứng dụng của bạn. tức là có thể tái sử dụng từ bất kỳ quan điểm nào của bạn
Chris

Có vẻ là câu trả lời đúng cho tôi. CodeIgniter chấp nhận các thư mục con cho các bộ điều khiển cho phép tách các bộ điều khiển thành các vùng để tôi có thể kết thúc với hai bộ điều khiển trang (một cho mỗi vùng). Cảm ơn!
Rushino

Nhưng bạn sẽ không kết thúc với Bộ điều khiển hơi lớn, mặc dù hành động của nó chỉ là tương đối? Hoặc là không có vấn đề?
Kid Diamond

4

@Rushino Bạn có hai 'ứng dụng' ở đây - giao diện người dùng (dành cho độc giả) và phụ trợ (dành cho quản trị viên). Đối với mỗi nhóm chức năng, bạn có một bộ điều khiển.

Đăng nhập là một nhóm như vậy, bao gồm việc tạo biểu mẫu HTML (các trường, gọi dạng xem) và xử lý biểu mẫu (xác thực, kết nối với mô hình). Vì vậy, 'đăng nhập' là một bộ điều khiển có hai hành động - GenerForm và handleForm.

Các trang được phân chia giữa ứng dụng giao diện người dùng - chỉ hiển thị các trang - và ứng dụng phụ trợ cho phép chỉnh sửa, xóa, tạo và có thể xem chúng theo một cách khác. Trang chủ là "chỉ là một trang khác" ở mặt trước ít nhất, vì vậy phù hợp với bộ điều khiển trang. Về phần phụ trợ, logic của nó có thể đủ khác để nó biện minh cho việc có một bộ điều khiển hoàn toàn khác.

Đối với người dùng - nếu người dùng có thể tự đăng ký, họ sẽ cần một bộ điều khiển lối vào, nhưng nếu không, mọi thứ phải làm với người dùng chỉ cần đi vào phần phụ trợ.

Lưu ý rằng mỗi chức năng phụ trợ có thể yêu cầu cả trình tạo và trình xử lý. Tuy nhiên, những thứ này có thể được chia thành các tệp cấu hình, với một plugin là trình tạo biểu mẫu chung.

Tóm lại, nó trông như thế này:

Frontend
  Pages
    View, Handle
  Login
    View, Handle
  Users
    Register (note that the handler can be the same as 'create' on the backend)
  Contact
    View
    Handle

Backend
  Users
    Create, Delete, Edit, Update, View
  Pages
    Create, Delete, Edit, Update, View

Đợi đã .. câu nói của bạn rằng một phần đại diện cho một ứng dụng? cách làm thú vị (và có lẽ là cách làm). Tự hỏi nếu codeigniter làm theo cách này .. sẽ kiểm tra. Tôi phải chắc chắn rằng bạn có thể đi từ ứng dụng này sang ứng dụng khác mà không phá vỡ bất kỳ phiên hoặc trạng thái kết nối nào.
Rushino

1
@Rushino CodeIgniter có thể làm theo cách này - bạn có thể đặt các thư mục bên trong thư mục Bộ điều khiển. Sự khác biệt giữa 'ứng dụng' không phải ở cấp độ cơ sở dữ liệu / mô hình, mà ở cấp độ bộ điều khiển / chế độ xem. Lý do cho sự tách biệt là phần phụ trợ của bạn đang làm những việc rất khác nhau, thường là với một thiết kế hoàn toàn khác. Nó giúp bảo mật, vì bạn có thể IP giới hạn toàn bộ thư mục phụ trợ. Và nó giúp phát triển vì bạn có thể làm việc trên phụ trợ mà không ảnh hưởng đến frontend.
Dan thổi vào

2

Tôi nghĩ bạn nên sử dụng Bộ điều khiển cho mỗi đơn vị kinh doanh, như OrderContoder cho tất cả các hoạt động liên quan đến đơn hàng, v.v. Tôi biết rằng trong trường hợp này, Bộ điều khiển nhận được LỚN, nhưng chúng ta vẫn có thể sử dụng các lớp của trình trợ giúp để ủy thác những thứ như khởi tạo mô hình và các lớp một phần để truyền bá các hành động trong các tệp riêng biệt.

Ví dụ: tôi có thể có Create.cs and OrdersControllercác tệp Order.cs List.cs cho lớp OrderContoder mỗi lớp với bộ Hành động tương ứng. Làm cho mọi thứ sạch sẽ hơn nhiều và vẫn giữ cho các hoạt động đơn hàng tập trung trong một lớp điều khiển duy nhất.

Chỉ 2 xu của tôi.


0

Tôi nghĩ rằng bạn có thể có một cách tiếp cận khác:

Một bộ điều khiển chính như một cửa trước cung cấp yêu cầu cho các bộ điều khiển cụ thể. Bằng cách này, bạn có thể sử dụng bộ điều khiển phía trước này để kiểm tra những thứ phổ biến như xác thực người dùng, phân tích google và bất kỳ nội dung chung nào khác bạn muốn làm và giữ cấu trúc MVC thuần túy.

Đây không phải là ý tưởng của tôi nhưng Symfony Framework hoạt động theo cách này vì vậy tôi có thể nói với bạn rằng theo kinh nghiệm của tôi, đây là một cách thực sự hay và thanh lịch để thực hiện một frontend.

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.