2010-05-18 47 views
61

Một số người coi WordPress là một nền tảng blog, một số người nghĩ nó là một CMS, một số người coi WordPress là một khung phát triển. Cho dù đó là gì, câu hỏi vẫn còn. WordPress MVC có tuân thủ không?Có tuân thủ MVC của WordPress không?

Tôi đã đọc các diễn đàn và ai đó đã hỏi về MVC khoảng ba năm trước. Có một số câu trả lời tích cực, và một số câu trả lời tiêu cực. Trong khi không ai biết chính xác MVC là gì và mọi người đều nghĩ về nó theo cách riêng của họ, vẫn còn một khái niệm chung có mặt trong tất cả các cuộc thảo luận.

Tôi có ít kinh nghiệm với các khung công tác MVC và dường như không có bất kỳ điều gì về chính khuôn khổ đó. Hầu hết các MVC được thực hiện bởi các lập trình viên, tôi có phải không? Bây giờ, quay trở lại WordPress, chúng ta có thể xem xét công cụ viết lại lõi (WP_Rewrite) bộ điều khiển không? Truy vấn & logic plugin làm mô hình? Và chủ đề là quan điểm? Hay tôi hiểu sai?

cám ơn;)

+1

MVC là mẫu thiết kế có kiến ​​thức độc lập và loại độc lập với loại phần mềm. Bất kỳ nền tảng blog, CMS hoặc khung công tác phát triển nào đều có thể là MVC, phụ thuộc vào cách nó được tạo ra. – eKek0

+0

eKek0, đã nghĩ như vậy. Nhưng hey, cần có một số ví dụ về CMS và các khung công tác không tuân thủ MVC, tức là kiến ​​trúc cốt lõi của chúng không phải là MVC. Bạn có nghĩ ra được không? – kovshenin

Trả lời

45

Bản thân Wordpress không được cấu trúc trong MVC, nhưng người ta có thể xây dựng các chủ đề và trình cắm theo định hướng MVC rất trong khuôn khổ. Có một số công cụ có thể giúp:

giải pháp

WordPress MVC:

chủ đề MVC trên WordPress.org Ý tưởng và Trác:

+1

Các ý tưởng MVC đường nối rất không phổ biến - hầu như tất cả đều được bình chọn cho đến chết. – Hexodus

9

Như đã đề cập trong các ý kiến, MVC là một mẫu thiết kế kiến ​​trúc, không phải là một khuôn khổ cụ thể, và không có, Wordpress không theo mô hình MVC.

Có một sự tách biệt các khung nhìn (mẫu) khỏi logic lập trình, nhưng chỉ ở lối vào, không nằm trong bảng quản trị và việc tách biệt các khung nhìn và logic ứng dụng là không thể tránh khỏi MVC. Việc triển khai mô hình MVC thường giả định một loại mô hình lập trình hướng đối tượng đằng sau nó và Wordpress là chủ yếu là được thực hiện theo cách thủ tục, với các truy vấn SQL đơn giản trong các hàm PHP, do đó không có mô hình thực tế.

24

Wordpress là loại MVC. Nếu bất cứ điều gì nó là một bố trí MVC kiểu kéo, nơi View 'kéo' dữ liệu từ mô hình. Nó thực hiện điều này theo một cách rất thủ tục, thay vì sử dụng nhiều đối tượng khác nhau, nhưng điều này thực sự làm cho các mẫu giao diện người dùng dễ viết hơn theo nhiều cách.

Điều này cũng cung cấp cho các chế độ xem một số mức độ logic điều khiển (do đó là loại MVC).

Cho phép chạy ứng dụng này xuống: Wordpress nhận URL. Các lõi wordpress hoạt động như một bộ điều khiển và xác định những truy vấn ban đầu để chạy của cơ sở dữ liệu, và mở rộng, những gì xem nên được nạp (xem thể loại, bài duy nhất hoặc xem trang, vv). Sau đó, gói đó trả lời truy vấn INTIAL và gửi nó tới tệp xem.

Tệp chế độ xem đó CÓ THỂ là tệp chỉ hiển thị nghiêm ngặt HOẶC nó có thể yêu cầu thêm thông tin/truy vấn ngoài thông tin được tích hợp sẵn. Đây là kiểu kéo của MVC, nơi khung nhìn kéo dữ liệu từ mô hình thay vì dữ liệu 'đẩy' bộ điều khiển từ mô hình vào khung nhìn.

Do đó, khi chế độ xem thấy mã để tải thanh bên hoặc khu vực tiện ích, nó sẽ yêu cầu thông tin đó. Tuy nhiên, những gì các vật dụng nên có được xác định bởi bộ điều khiển, mà nhìn vào mô hình cho những gì các vật dụng trong thanh bên, và sau đó chọn những người được thiết lập để hiển thị trên trang hiện tại, và trả về những người xem.

Mỗi phần trong số đó không phải là một đối tượng không làm cho MVC này ít hơn. Bạn có thể thay đổi lõi WP mà không (nhất thiết) thay đổi bất cứ điều gì về một chủ đề. Tương tự, miễn là bạn sử dụng các hàm dựng sẵn như 'get_pages()' thì mô hình và các bảng cơ sở dữ liệu có thể thay đổi miễn là các hàm đó vẫn trả về đúng dữ liệu. Vì vậy, mô hình độc lập với khung nhìn, và bộ điều khiển độc lập là tốt (trừ khi khung nhìn thêm logic điều khiển để làm nhiều hơn so với lõi thông thường).

Mặc dù COULD có đối tượng mô hình đang nắm giữ một số phương pháp và nội dung như WPModel :: get_pages ('blah blah') và chứa tất cả mọi thứ theo cách đó, vẫn có những mối quan tâm cơ bản.

Xem: tệp mẫu Bộ điều khiển: WP core Mô hình: các chức năng khác nhau xử lý xử lý dữ liệu cụ thể.

Miễn là tên, đối số, v.v., giữ nguyên (hoặc chỉ có thêm mới) sau đó tách mối quan tâm được duy trì và có thể thay đổi mà không làm phiền người khác.

Nó không phải là một phiên bản siêu sạch của MVC, (đặc biệt là khi móc tham gia), nhưng ở một mức độ cơ bản nó bắt đầu ở đó.

Và đang được tiến hành về nó không phải là một điều xấu IMO. Một yêu cầu từ một trang web khá vốn thủ tục: đó là một quá trình với một khởi đầu rõ ràng và kết thúc, và chỉ cần một thủ tục để xử lý yêu cầu, lấy dữ liệu, gói nó, sau đó chết. Bạn có thể thiết lập các bước đó với các đối tượng và các phương thức đối tượng và các bố cục OOP (điều này sẽ làm cho một số thứ dễ dàng hơn) hoặc bạn chỉ có thể viết nhiều lệnh gọi hàm và tách chúng ra theo cách đó. Các thành viên lớp như biến riêng tư bị mất theo cách đó nhưng tùy thuộc vào nhu cầu của ứng dụng ... bạn có thể không quan tâm.

Không có cách nào lớn để phát triển và WP ngồi ở mức 20% trang web để nó hoạt động đúng. Có lẽ điều gì đó liên quan đến việc không làm cho mọi người phải học/ghi nhớ thứ bậc lớp phức tạp để có được cơ sở dữ liệu trả lời câu hỏi 'trang con nào là trang x?' và xử lý dữ liệu đó. Bạn có thể làm cho nó dễ dàng với OOP? có, nhưng nếu Joomla là một ví dụ về việc làm thế nào để thực hiện một trang web tùy chỉnh phức tạp với OOP, thì WP là FAR dễ dàng hơn và nhanh hơn, và thời gian là tiền bạc.

+0

Tôi đang bình luận về bài viết của tôi ở đây. Wordpress không phải MVC bởi chính nó. Trong thực tế, các mẫu thiết kế nó tiếp cận ngay ra khỏi hộp chắc chắn không phải là MVC. Thông thường tôi sử dụng các tệp dạng xem như page.php như một bit kiểu bộ điều khiển của tập lệnh (chuẩn bị biến, logic nghiệp vụ, v.v. và nói chuyện với DB nếu cần) và sau đó tải một tệp xem riêng biệt, ví dụ: page-view.php. Tôi đã làm theo cách đó trong một thời gian, tôi quên mã WP phức tạp như thế nào cho đến khi tôi nhìn vào những thứ quá phức tạp. – Rampant

2

RokkoMVC là một khung MVC nhỏ được xây dựng đặc biệt cho WordPress. Dự án này có nghĩa là để đơn giản hóa chức năng AJAX trong các ứng dụng WordPress, cũng như mang lại tất cả các lợi ích khác của việc sử dụng các mô hình, khung nhìn và các bộ điều khiển cho chủ đề của bạn.

4

Chỉ cần thêm vào danh sách tùy chọn, (Tôi thừa nhận là thiên vị là tác giả) swpMVC là một khung MVC gọn nhẹ, đầy đủ tính năng, lấy cảm hứng từ Rails, Sinatra, Express, và FuelPHP. Đó là tài liệu kỹ lưỡng, và trong khi tôi đã sử dụng và thích wp-mvc, tôi muốn một cái gì đó mà các mô hình đã có thể cư trú lượt xem, bao gồm các điều khiển biểu mẫu để tương tác với các mô hình đã nói.

Tôi đặt điều này cùng nhau để giảm số lượng mã điều khiển được yêu cầu để đặt cùng một ứng dụng lên trên WordPress và kết quả là một khuôn khổ rất nhanh và hiệu quả chạy bên trong WordPress. Các mô hình được dựa trên PHP Activerecord và 8 mô hình được bao gồm cho các loại dữ liệu WordPress hiện có, bao gồm Đăng, PostMeta, Người dùng, UserMeta, Thời hạn và một vài loại khác. Việc tạo mô hình dữ liệu rất dễ nhờ thư viện activerecord và tôi rất thích làm việc với khung công tác này rất nhiều.

Ngoài ra tàu với gạch PHP và PHP nhanh Profiler (như đã thấy trong FuelPHP.)

+1

Ồ, công việc tuyệt vời Brian! Khung rất hay, tôi sẽ thử. – Hexodus

1

Tôi đã có một bash thời gian gần đây việc tạo một plugin mà làm cho việc sử dụng một hệ thống view-controller đơn giản, và khá thích kết quả, vì vậy tôi đã tách các mẫu ra khỏi số to its own repo. Nó cung cấp các bộ điều khiển dựa trên đối tượng, truyền các biến cục bộ tới các khuôn mẫu PHP, các mảng mẫu (các khuôn mẫu trong các khuôn mẫu) và các thành phần (các mảng mẫu với bộ điều khiển con của riêng chúng). Tất cả trong hai lớp học nhỏ!

Tất nhiên, tôi đã viết mã này nghĩ rằng không có nhà phát triển WP nào khác đã xem xét vấn đề trước ;-).

0

Nó cách xa mvc, không có điều kinda-sorta như một số người nói, đó là MVC hay không ... Thực tế là bạn viết logic trên cấp độ xem không đủ điều kiện nó như là một khuôn khổ mvc. Lý do mọi người sử dụng nó - thật dễ dàng để tìm hiểu, bạn không cần phải là lập trình viên php hardcore, họ lười biếng.

+1

WordPress là xa "dễ học" để sử dụng nó đúng cách, và IMO đó là * vì * nó không sử dụng một mẫu MVC. Đó là sự kết hợp của nhiều kỹ thuật và mẫu thiết kế được giới thiệu trong những năm qua, với khả năng tương thích cũ giữ lại bất kỳ sự sửa chữa lớn nào. Các cơ sở mã có thể là một bãi mìn để thương lượng, và "lười biếng" sẽ nhấn nhiều vấn đề, như họ sẽ với bất kỳ khuôn khổ. – Jason

+0

Thật dễ dàng để tìm hiểu, so sánh với Zend hoặc các khung công tác thích hợp khác như CI ... Ngay cả các quy ước đặt tên cũng để lại nhiều chỗ để cải thiện. Nào!! – lokers

+1

Bạn nói đúng - WP không phải là MVC. Tôi chỉ mới bắt đầu với WP và cái nhìn đầu tiên bên trong các tệp mẫu của một chủ đề rất nổi tiếng làm tôi sợ - điều này trông giống như kiểu mã hóa mọi người đã sử dụng cách đây 10 năm - html, php, css trộn lẫn với nhau. Kinh doanh logic và đại diện màn hình là ở một nơi. Đừng làm cho tôi sai - WP là rất tốt đẹp nhưng nó cần một IMHO viết lại. – Hexodus

4

Một trong những chủ đề định kỳ trồng trong các cuộc thảo luận vì nó liên quan đến WordPress là ý tưởng của WordPress và MVC.

Nhưng vấn đề là MVC không phải là viên đạn bạc phát triển web mà chúng tôi cố gắng làm cho nó trở thành hiện thực. Vâng, đó là một mẫu thiết kế tuyệt vời và cá nhân tôi nghĩ rằng nó phù hợp với mô hình ứng dụng web như găng tay, nhưng không phải mọi khung công tác hay nền tảng đều thực hiện mẫu thiết kế đó.

Trường hợp điểm: WordPress không phải là MVC.

Và điều đó vẫn ổn. Tôi nghĩ rằng chúng ta cần phải để lại mong muốn cố gắng để shoehorn nó vào các dự án của chúng tôi sang một bên đặc biệt là khi mô hình WordPress cung cấp không chỉ đủ, nhưng hoạt động tốt khi tận dụng một cách chính xác.

“Nhưng tôi yêu MVC!”

Tôi cũng vậy! Trong thực tế, tôi đã dành năm cuối cùng làm việc trên một dự án mà nhiều hơn hoặc ít hơn bắt chước kiến ​​trúc MVC. Ví dụ cấp cao về MVC.

enter image description here

Ví dụ cấp cao về MVC.

Ví dụ:

Views were implemented using templates 
Controllers were implemented by a combination of using function names like create, read, update, destroy, delete, and so on (even though these functions were hooked into the WordPress API 
Models were functions also were called to validate and verify data prior to serializing the data. Again, this required that certain functions be hooked into WordPress to achieve the desired result. 

Cuối cùng, một bộ quy tắc viết lại cho ứng dụng một bộ sạch các URL có thể dự đoán trong các định dạng của/người/cập nhật/1 hoặc/người/all. WordPress thực hiện mẫu nào?

WordPress triển khai kiến ​​trúc hướng sự kiện (trong đó có một số biến thể, chẳng hạn như Mẫu quan sát).

Nói tóm lại, bạn khái niệm có thể nghĩ về điều này như sau:

Things happen when WordPress is processing information. 
You can register your own function to fire when these things happen. 

Không quá phức tạp, phải không? Một ví dụ cao cấp của mô hình hướng sự kiện enter image description here Một ví dụ cao cấp của mô hình hướng sự kiện

Khi bạn bắt đầu suy nghĩ về mô hình trong đó nó hoạt động chứ không phải cố gắng để làm cho nó làm việc cách mà bạn muốn nó hoạt động, nó giải phóng. Nó giúp giải quyết vấn đề dễ dàng hơn nhiều.

Điểm mấu chốt là: WordPress triển khai mẫu thiết kế theo hướng sự kiện, vì vậy ngay cả khi bạn cố gắng triển khai MVC, bạn vẫn sẽ phải sử dụng hệ thống móc.

Nếu bạn không cẩn thận, bạn có thể kết thúc cố gắng tạo ra kiến ​​trúc hoàn hảo mà không thực sự hoàn thành công việc của bạn, và vì thế bạn sẽ thấy mình cao lên trong bầu không khí của phần mềm. phi hành gia. Vì vậy, bạn đang nói tránh các mẫu thiết kế?

Không hề! Các mẫu thiết kế phục vụ một mục đích bởi vì, trên hết, chúng về cơ bản cung cấp cho chúng ta các giải pháp cho các vấn đề trước đây và thường được giải quyết. Sử dụng chúng!

Nhưng điểm tôi đang cố gắng thực hiện là chúng tôi không cần phải cố gắng buộc mọi thứ phải phù hợp với mô hình chỉ vì chúng tôi thích mô hình. Đó không phải là mục đích của họ. Thay vào đó, hãy tận dụng hình mẫu chính mà nền tảng lựa chọn của bạn thực hiện - trong trường hợp của chúng tôi, đó là mô hình theo hướng sự kiện - và sau đó triển khai các mẫu phù hợp (chẳng hạn như tiêm phụ thuộc hoặc tương tự).

Nếu không, nó giống như cố gắng đặt chân vào một chiếc găng tay.

Được cấp phép (và hoàn toàn được sao chép: P) từ: http://tommcfarlin.com/wordpress-and-mvc/

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