2009-04-17 23 views
6

Tôi hiện đang sử dụng CodeIgniter làm khung làm việc của mình khi sử dụng PHP. Một trong những điều tôi đang đấu vật là ý tưởng của một "trang", và cách thể hiện điều đó đúng trong MVC. Theo kiến ​​thức của tôi, CodeIgniter có một bộ điều khiển phía trước đại diện cho các bộ điều khiển trang. Trong quá trình suy nghĩ của tôi, mỗi trang sẽ có bộ điều khiển riêng. Tất cả quá thường xuyên mặc dù tôi thấy ai đó sử dụng một bộ điều khiển trang nhồi với nhiều phương pháp. Vì vậy, theo nghĩa đó, mỗi hành động sẽ trở thành trang riêng của nó. Tôi không bao giờ thực sự thích ý tưởng nhồi nhiều phương pháp vào một bộ điều khiển, bởi vì nó có vẻ như sẽ có quá nhiều chi phí nếu bạn chỉ cần một hoặc hai phương pháp trong bộ điều khiển tại một thời điểm nào đó. Điều đó có nghĩa là Nó có vẻ hợp lý hơn cho mỗi trang để có bộ điều khiển riêng của nó, và các hành động sẽ chỉ tương ứng với một cái gì đó bạn có thể làm trên trang cụ thể đó. Tôi đang nghĩ về điều này một cách sai lầm?Điều gì định nghĩa khái niệm "Trang" truyền thống trong MVC?

Điều gì làm cho nó khó hiểu hơn là tôi sẽ nhận thấy trong một số ứng dụng web mà họ sẽ có một bộ điều khiển sẽ có nhiều phương pháp (ví dụ: đăng nhập, đăng ký, xem, chỉnh sửa, vv), nhưng trên những người khác bộ điều khiển đăng nhập và bộ điều khiển đăng ký. Việc sử dụng thích hợp của một "bộ điều khiển trang" là gì?

Trả lời

7

Từ phối cảnh tên miền, tôi chắc chắn nói điều đó có ý nghĩa hơn khi có 1 bộ điều khiển cho mỗi ngữ cảnh miền. Không nhất thiết phải một trang cho mỗi trang mặc dù tùy thuộc vào ngữ cảnh này có thể là trường hợp. Ý tôi là ngữ cảnh là "hành động có liên quan chặt chẽ".

Ví dụ: bộ điều khiển tài khoản phải xử lý việc đăng nhập, đăng ký, đăng xuất, thay đổi mật khẩu, hành động. Tất cả chúng đều nằm trong ngữ cảnh của "Tài khoản"

Lấy Stackoverflow chẳng hạn. Tôi sẽ có một bộ điều khiển "Câu hỏi" sẽ có các hành động như DisplayQuestion, AskQuestion, Delete Question, MostRecent Questions, vv Chúng đều khác nhau "Views/pages" được quản lý bởi một bộ điều khiển.

1

Bạn nói đúng rằng mọi phương pháp công khai trong bộ điều khiển sẽ trở thành "trang". Điều đó đang được nói, nó không nhất thiết phải là một trang web, một hành động có thể là một bài đăng của dữ liệu và sau đó chuyển hướng đến một hành động/trang khác để trang không nhất thiết có nghĩa là "trang web".

MVC sử dụng nhiều quy ước để mọi thứ hoạt động. Ví dụ, mọi bộ điều khiển phải kết thúc bằng "Bộ điều khiển". Vì vậy, một tập hợp các trang người dùng (tạo, chỉnh sửa, xóa, vv) sẽ nằm trong UserController. Trong thư mục Views, mỗi phương thức hoặc hành động công khai trong lớp điều khiển trở thành một trang web trong một thư mục khớp với tiền tố của bộ điều khiển (Trong trường hợp này, một thư mục User). Vì vậy, một hành động được gọi là "Xóa" trong lớp điều khiển sẽ trỏ đến trang Delete.aspx trong thư mục Người dùng.

Có vẻ như một chút khó xử khi đặt tất cả các phương thức đó trong một lớp, nhưng nó có một công việc tốt đẹp để tổ chức như các chức năng dựa trên đối tượng của bạn.

+1

Quan điểm của bạn về mọi bộ điều khiển phải kết thúc bằng "Bộ điều khiển" chỉ áp dụng cho khung công tác Asp.Net Mvc và không nhất thiết là khuôn khổ PHP mà anh ta đang xử lý. – Micah

1

Trong MVC, một 'trang' là những gì bạn nhận được khi bạn đặt cả ba. Mô hình xử lý lớp dữ liệu, khung nhìn xử lý HTML thực tế mà người dùng nhìn thấy và trình điều khiển quyết định cách chúng giao tiếp với nhau để hiển thị dữ liệu mong muốn. Sự lựa chọn của tôi là sử dụng một bộ điều khiển riêng biệt hoặc một phương thức khác cho một bộ điều khiển hiện có bản lề về cách hoạt động gần với (các) bộ điều khiển khác mà tôi có. Nói rằng tôi muốn có một bộ điều khiển UserAdmin, bây giờ sẽ có khả năng xử lý thêm người dùng, xóa người dùng, thay đổi mật khẩu, v.v. Nếu tôi thêm chức năng xử lý thay đổi tài khoản của người dùng theo cách nào đó, tôi sẽ đặt nó trong đó. Nếu tôi đã tách chúng ra thành bộ điều khiển riêng của họ, tôi sẽ tự nhiên thêm một cái khác. Bộ điều khiển cho phép bạn sắp xếp các tác vụ tương tự với nhau để chúng có thể tận dụng những gì đã có trong lớp, thay vì phải tạo lại những gì đã được thực hiện. Rất nhiều của nó là làm thế nào các lập trình viên nghĩ rằng nó nên được thực hiện.Điều gì có ý nghĩa với bạn có thể không có ý nghĩa với tôi, đó là sự lựa chọn của nhà phát triển (hoặc nhà thiết kế).

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