Có phải MVC chỉ là SEO của lập trình PHP?


9

Có khoảng một triệu "khung công tác PHP". Và hầu hết trong số họ lập hóa đơn theo mô hình MVC. Mặc dù rất mong muốn vượt qua phong cách mã hóa osC Commerce (xử lý logic được trộn lẫn nhiều với SQL và HTML), nhưng chắc chắn có những cách tiếp cận đơn giản và dễ thực hiện hơn để có được thiết kế ứng dụng có thể duy trì.

Khái niệm MVC ban đầu được nhắm mục tiêu tại các ứng dụng GUI. Và đối với Gtk / Python, có vẻ khả thi để tuân theo nó. Nhưng các ứng dụng web PHP không hoạt động trên Chế độ xem trực tiếp (các yếu tố GUI) và thời gian chạy Bộ điều khiển liên tục. Nó chắc chắn là một cách gọi sai nếu nó chỉ mô tả nhóm mã + thư mục được sử dụng hoặc đặt tên lớp.

"MVC" dường như được sử dụng như một từ thông dụng cho các khung công tác PHP. Và tôi thực sự đã thấy một hoặc hai khung công tác PHP trưởng thành thừa nhận nó, nhưng dù sao cũng xác định lại cụm từ để phù hợp với quốc tế.
Vì vậy, nói chung là dầu rắn? Tại sao thuật ngữ không được sử dụng tốt hơn và một khái niệm hợp lý hơn để truyền bá PHP có thể duy trì?

Một số lý luận công phu

Tại sao tôi nghi ngờ rằng việc triển khai PHP không tuân theo mẫu MVC thực:

Mô hình : về lý thuyết, Mô hình nên mập và chứa logic nghiệp vụ và bộ điều khiển phải là trình xử lý mỏng (đầu vào-> đầu ra). Trong thực tế, các khung công tác PHP ủng hộ các Mô hình nông . Ví dụ, CI và Symfony tương đương Model == ORM. Ngay cả đầu vào HTTP cũng được xử lý bởi bộ điều khiển, không được coi là mô hình.

Lượt xem : cách giải quyết với AJAX được giảm giá, không thể có Lượt xem trên các trang web. Các khung công tác PHP vẫn bơm ra các trang. Giao diện vẫn hoạt động hiệu quả theo mô hình HTTP thông thường, không có lợi thế so với các ứng dụng không phải là MVC. (Và cuối cùng, không có khung php rộng rãi nào thực sự có thể xuất ra GUI Views thay vì HTML. Tôi đã thấy một thư viện PHP có thể vận hành Gtk / Console / Web, nhưng các khung không có.)

Kiểm soát viên : Tôi không chắc chắn. Các bộ điều khiển có thể không cần phải hoạt động lâu dài và liên tục hoạt động trong mô hình MVC. Trong bối cảnh khung công tác PHP, tuy nhiên họ chủ yếu yêu cầu xử lý. Không thực sự là một cái gì đó để có được tranh luận về, nhưng nó chỉ cảm thấy hơi ồn ào.

Sẽ có mô tả tốt hơn? Tôi đã thấy các từ viết tắt như PMVC hoặc HMVC được ném xung quanh. Mặc dù các mô tả trở nên mơ hồ hơn ở đó, nhưng có lẽ những mô tả này sẽ mô tả các khung web hiện tại ít hokey hơn?


Vì vậy, kết luận: Các khung công tác PHP thực hiện một khái niệm tương tự với MVC gốc. Tôi nghĩ rằng nó đóng đinh tốt nhất ở đây: stackoverflow.com/questions/1549857/simple-php-mvc-framework/...
Mario

Tôi đã rất ngạc nhiên khi đọc rằng "hầu hết các khung công tác PHP sử dụng Lượt xem như các trang đơn giản". Trong tất cả các khung công tác PHP mà tôi đã sử dụng, Chế độ xem có thể là bất cứ thứ gì, về cơ bản nó chỉ là một mẫu HTML. Vì vậy, nó có thể là một hộp văn bản, một thanh bên, một thanh điều hướng, một khối văn bản tĩnh hoặc thậm chí là một bố cục trang. Tôi không thể nghĩ ra bất kỳ khung nào không cho phép bạn nhúng Lượt xem trong Lượt xem, cho phép bạn thực hiện khá nhiều thứ miễn là logic / xử lý nghiệp vụ thực tế của bạn được thực hiện trong Bộ điều khiển trước.
Lotus Notes

Các mẫu (không phải số nhiều) là một lớp . Nó không phải là một tập tin hay một lớp. Nó là một tập hợp các đối tượng miền, ánh xạ dữ liệu và dịch vụ. Đọc này .
James

3
... SEO? "Tối ưu hóa công cụ tìm kiếm"?
Izkata

Câu trả lời:


12

Tôi nghĩ rằng bạn đang nhìn vào điều này theo cách hoàn toàn sai. Một ứng dụng GUI và một trang web là hai thế giới riêng biệt nên định nghĩa chính xác của MVC sẽ không bao giờ hoạt động cho cả hai. MVC thiên về lý tưởng: tách biệt một số phần của ứng dụng như hiển thị và logic.

Trong PHP (hoặc web nói chung), View là chính trang web: đầu ra HTML. Nó không "sống" theo định nghĩa của bạn, nhưng bạn chỉ cần nhấp vào liên kết để quay lại bộ điều khiển (tức là yêu cầu trang khác).

Bộ điều khiểnMô hình là nơi mọi thứ khác nhau, như bạn đã giải thích. Trong PHP mô hình có xu hướng là lớp dữ liệu, tương tác với cơ sở dữ liệu, v.v. Nhưng nó vẫn đang mô hình hóa tình huống và bộ điều khiển vẫn kiểm soát luồng ứng dụng, nếu chỉ một lần cho mỗi lần tải trang.

Vì vậy, tên "Model-View-Controller" hoàn toàn hợp lý, mặc dù cách triển khai khác nhau trong ứng dụng GUI so với ứng dụng web.


Tôi không có cãi nhau với khái niệm trừu tượng của MVC. Tôi phản đối rằng các khung công tác PHP là không trung thực khi thực sự chỉ thực hiện thụ động-MVC. Ngay cả mẫu "Model-View-Presenter" cũng là một mô tả thực tế hơn. Nhưng chắc chắn, các điều khoản phải được uốn cong khi bạn áp dụng chúng cho một tên miền khác. Câu hỏi ban đầu; thuật ngữ uốn cong có thể làm cho nó một từ thông dụng?
mario

3

Vì tôi không biết về các khung công tác PHP, điều này được nhìn thấy từ một khung nhìn ngôn ngữ cấp thấp.

Mô hình:

về lý thuyết, các mô hình nên béo và chứa logic kinh doanh

Điều đó hoàn toàn sẵn sàng để làm, tôi không thấy PHP phải làm gì với điều này ...

Các mô hình là các lớp dữ liệu trong PHP có thể có thể giao tiếp với cơ sở dữ liệu,
sau đó bạn cũng có thể gửi cùng một mô hình hoặc một mô hình theo định dạng JSON cho máy khách.

Tôi không nói logic kinh doanh, nó giống logic dữ liệu hơn (xác thực, tương tác cơ sở dữ liệu, nhập / xuất, ...).

và bộ điều khiển phải là trình xử lý mỏng (đầu vào-> đầu ra)

Các lớp Trình điều khiển của bạn tương tác với các lớp Mô hình, chúng thực sự rất mỏng.

Dựa trên đầu ra, thực hiện một số điều với Mô hình ... Và trả lại ModelView cho máy khách ...

Trong thực tế, các khung công tác PHP ủng hộ các Mô hình nông. Ví dụ, CI và Symfony tương đương Model == ORM. Ngay cả đầu vào HTTP cũng được xử lý bởi bộ điều khiển, không được coi là mô hình.

Tôi không thực sự biết về các khung PHP đó ...

Nhưng đầu vào HTTP phải được xử lý trước khi đến bộ điều khiển,
bạn có thể dễ dàng tạo một lớp biến dữ liệu GET và POST thành định tuyến và tham số tốt.

Đây chính xác là những gì xảy ra trong ASP.NET MVC 2 và không có gì sai với nó,
tôi không biết điều này sẽ xảy ra với PHP như thế nào nhưng tôi đoán nó sẽ liên quan chặt chẽ.

Bạn thậm chí có thể dễ dàng biến dữ liệu GET và POST thành một mô hình, mô hình có thể chứa logic xây dựng cho điều đó. Hoặc một số lớp riêng biệt có thể được thêm vào cho mục đích đó.


Lượt xem:

cách giải quyết với AJAX được giảm giá, không thể có Lượt xem trên các trang web. Các khung công tác PHP vẫn bơm ra các trang.

Tôi không hiểu tại sao không thể, sự khác biệt duy nhất là giao thức và PHP có thể trả về JSON, v.v ...

Một trang là chế độ xem của bạn và nó có thể yêu cầu và cập nhật thông qua AJAX + JSON.
Một lần nữa, tôi không thực sự biết về các khung PHP đó nhưng trong ASP.NET MVC 2, nó hoạt động theo cách đó.

Giao diện vẫn hoạt động hiệu quả theo mô hình HTTP thông thường, không có lợi thế so với các ứng dụng không phải là MVC. (Và cuối cùng, không có khung php rộng rãi nào thực sự có thể xuất ra GUI Views thay vì HTML. Tôi đã thấy một thư viện PHP có thể vận hành Gtk / Console / Web, nhưng các khung không.

Ưu điểm duy nhất bạn có được (và tương tự với các ứng dụng thông thường) là tách thành Mô hình (Dữ liệu) + Chế độ xem (GUI) + Bộ điều khiển (Logic). Tương tự, bạn sẽ không thấy khung C ++ thực tế có thể xuất ra HTML hoặc JSON thay vì GUI Views.


Điều khiển:

Tôi không chắc chắn. Các bộ điều khiển có thể không cần phải hoạt động lâu dài và liên tục hoạt động trong mô hình MVC. Trong bối cảnh khung công tác PHP, tuy nhiên họ chủ yếu yêu cầu xử lý. Không thực sự là một cái gì đó để có được tranh luận về, nhưng nó chỉ cảm thấy hơi ồn ào.

MVC là một kiến ​​trúc / mẫu phần mềm, trong đó Trình điều khiển chạy và trong bao lâu không hoạt động.


1

Nhưng các ứng dụng web PHP không hoạt động trên Chế độ xem trực tiếp (các yếu tố GUI) và thời gian chạy Bộ điều khiển liên tục.

Không, họ chắc chắn làm!

Hãy nghĩ về các ứng dụng AJAX, sau đó khung nhìn hỏi một cái gì đó cho bộ điều khiển và lấy lại một phần xem,
khung nhìn hoặc dữ liệu này sau đó được điền vào một nơi nào đó trong trang và do đó được cập nhật trực tiếp.

Bộ điều khiển cũng liên tục vì bạn có thể sử dụng cookie / phiên.

"MVC" dường như được sử dụng như một từ thông dụng cho các khung công tác PHP.

MVC là một Kiến trúc phần mềm, một số khung có thể sử dụng nó như một tiếng vang, nhưng một số khung khác làm đúng ...
Xem danh sách một số khung trên Wikipedia .

MVC chỉ là SEO của lập trình php?

MVC và SEO là hai thứ khác nhau, nhưng vâng ... MVC đang trở nên phổ biến hơn.


1
Chắc chắn, các yếu tố UI AJAX mang nó lại gần hơn, nhưng đó là một cách giải quyết khách quan. Và nó vẫn có vẻ uốn cong định nghĩa. (Btw, tôi biết về Cappucino.org và các bộ công cụ thực sự khác, nhưng đã tham khảo tổng số các khung công tác PHP.)
mario

Sẽ không gọi nó là một cách giải quyết, bạn cũng có thể tính cả Qt và các khung công tác khác như cách giải quyết khác ... Chỉ có chi phí truyền dữ liệu giữa máy chủ và máy khách, và với tốc độ và độ trễ kết nối hiện tại, điều này thậm chí không nhiều nữa không. Tôi không thấy nó uốn cong định nghĩa như thế nào: Mẫu cô lập logic miền (logic ứng dụng cho người dùng) khỏi đầu vào và trình bày (UI), cho phép phát triển độc lập, thử nghiệm và bảo trì từng loại.
Tamara Wijsman

1
Tôi hiểu ý bạn là gì. Nếu bạn hiểu PHP là máy chủ ứng dụng và AJAX là cơ chế RPC giữa logic và UI, thì có. Tuy nhiên, tôi vẫn gọi nó là một cách giải quyết trên HTTP. OTOH không chắc nó có liên quan đến mệnh giá MVC không. Tôi nghĩ rằng tôi thực sự phản đối hàm ý rằng chỉ "" "MVC" "" cung cấp các giao diện người dùng web tương tác và đáp ứng mà bạn mô tả.
mario

-1

Theo ý kiến ​​của tôi, sử dụng MVC trong php đưa lập trình viên lên web. Việc lấy từ Java sang PHP trở nên dễ dàng hơn khi bạn biết cách làm việc với MVC.


+1 Nhưng đó chỉ là một lợi thế về thuật ngữ hay có các khung công tác PHP gần với triển khai Java. (Và ngầm hiểu, bạn đang nói về GUI Java hay Web / Struts?)
mario

Tôi không biết chính xác nhưng tôi đang sử dụng khung zend và tôi đoán nó giống với các khung MVC khác: điều rất quan trọng là phải biết phải làm gì trong mô hình, khung nhìn và bộ điều khiển của bạn và do đó, khoảng cách giữa thế giới lập trình và mô hình hóa thế giới đang đóng cửa Có lẽ thời đại tập sự đã qua, và tôi rất thích thấy điều đó. Nó quá lỗi.
baklap
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.