10/10/2018, 13:20

[Help] Xây dựng web theo mô hình MVC and OOP

Chả là em đang dựng một project nho nhỏ theo hướng đối tượng phác theo cách hoạt động của Codeigniter Framework. Mô hình của em đại loại thế này .



+ Trong đó:
- Thư mục controllers , models, views chứa các controller, model và view tương ứng,
các controller và model này thừa kế từ controller cha trong mục libs bên dưới.
- Libs chứa các file điều hướng controller bootstrap.php class dựng sẵn như session, cache, controler cha, model và view cha.
+ Cách hoạt động : file .htaccess rewrite lại url để dữ liệu đổ về file index, index autoload các file trong libs và khởi tạo lớp bootstrap().

Ví đụ khí ta đánh vào http://localhost/vmc/login thì bootstrap sẽ gọi controller login->model->view tương ứng. Đại loại là vậy, em giải thích hơi củ chuối nhưng các pro cũng chẳng lạ gì kiểu này.

Có điều e thắc mắc là. Hoạt động như cách trên thì ta chỉ xử lý được các phần động như login, search, register.... mỗi lần trình duyệt thay đổi thì nó mới gọi đên controller tương ứng
Còn các mục như menu, sidebar thì ở controller nào nó đều hiển thì. Vậy theo các pro có kinh nghiệm rùi thì xử lý các mục tĩnh này thế nào để nó chạy ổn mà vẫn theo mvc and oop ạ.

Rất mong được chỉ giáo. Thanks all.
antipro.vn viết 15:24 ngày 10/10/2018
cái đó gọi là block (trong magento/php-nuke) hoặc là module (trong joomla).
Mỗi block được viết theo Model-View
Chỗ nào cần hiển thị thì bác chỉ cần include file / gọi 1 hàm / chạy 1 command chỗ đó

Bạn có thể đọc kỹ hơn trong tài liệu mô tả kỹ thuật của Magento hoặc Joomla, cả wordpress widget cũng có tác dụng tương tự.
php_code viết 15:27 ngày 10/10/2018
Được gửi bởi antipro.vn
cái đó gọi là block (trong magento/php-nuke) hoặc là module (trong joomla).
Mỗi block được viết theo Model-View
Chỗ nào cần hiển thị thì bác chỉ cần include file / gọi 1 hàm / chạy 1 command chỗ đó

Bạn có thể đọc kỹ hơn trong tài liệu mô tả kỹ thuật của Magento hoặc Joomla, cả wordpress widget cũng có tác dụng tương tự.
Ác, đang hỏi về Codeigniter bác ơi.

@chủ topic, bạn có thể dùng 2 cách:
1. Áp dụng mô hình HMVC ( HMVC là MVC của những MVC)
2. Cần hiện chỗ nào thì $this->load->view('abc'); chỗ ấy.
yeuyeulam viết 15:35 ngày 10/10/2018
Đầu tiên cho e cảm ơn hai bác ạ. sau đó hai cho e hỏi thêm tí a.

Được gửi bởi antipro.vn
cái đó gọi là block (trong magento/php-nuke) hoặc là module (trong joomla).
Mỗi block được viết theo Model-View
Chỗ nào cần hiển thị thì bác chỉ cần include file / gọi 1 hàm / chạy 1 command chỗ đó

Bạn có thể đọc kỹ hơn trong tài liệu mô tả kỹ thuật của Magento hoặc Joomla, cả wordpress widget cũng có tác dụng tương tự.

Theo pro thì em bỏ qua controller của các mục này mà chỉ cần làm model rồi bên view include rội gọi lớp tương ứng ạ.

Được gửi bởi php_code
Ác, đang hỏi về Codeigniter bác ơi.

@chủ topic, bạn có thể dùng 2 cách:
1. Áp dụng mô hình HMVC ( HMVC là MVC của những MVC)
2. Cần hiện chỗ nào thì $this->load->view('abc'); chỗ ấy.
+ Theo bác thì :

1. Nếu áp dụng theo HMVC thì ta đí xây dựng các module con, và trong các mô dul ccon này có controller, model và vew riêng biệt ạ ? Nếu vậy thì controller và model cha trong libs có sử dụng nữa không ạ ?

2. Nếu gọi đén view tương ứng thì cái này sẽ gọi ở contrller nà hả bác. Vì controller các mục này sẽ không được gọi trực tiếp qua bootstrap được ạ ?
antipro.vn viết 15:27 ngày 10/10/2018
Cái này thực ra mà nói thì, tùy, nhiều.
Gần như mỗi framework đều tìm cách giải quyết vấn đề này một cách "hợp lý" nhất có thể.
longfan viết 15:32 ngày 10/10/2018
Nếu bạn đang phát triễn 1 dự án open source thì tốt nhất là tuân theo chuẩn OOP quốc tế là MVC.
Còn ngược lại bạn hãy sáng tạo 1 mô hình MVC mà bạn có thể kiểm soát tốt nhât.

Thật ra Model->View->Control là định nghĩa khái niệm mà thôi, thật ra mỗi lập trình viên khi bước đầu lập trình đều đã viết code theo MVC rồi.

- Nhận yêu cầu từ người dùng thông qua GET, POST.
- Kiểm tra, truy vấn và lấy dữ liệu từ Database
- Trả về cho người dùng cái họ đã yêu cầu.

Hehehe, chỉ có điều là thay vì tách ra thì chúng ta gồm chung vô 1 hàm hoặc 1 tập tin mà thôi.
ThietKeWebsite99 viết 15:33 ngày 10/10/2018
Được gửi bởi yeuyeulam
Đầu tiên cho e cảm ơn hai bác ạ. sau đó hai cho e hỏi thêm tí a.




Theo pro thì em bỏ qua controller của các mục này mà chỉ cần làm model rồi bên view include rội gọi lớp tương ứng ạ.



+ Theo bác thì :

1. Nếu áp dụng theo HMVC thì ta đí xây dựng các module con, và trong các mô dul ccon này có controller, model và vew riêng biệt ạ ? Nếu vậy thì controller và model cha trong libs có sử dụng nữa không ạ ?

2. Nếu gọi đén view tương ứng thì cái này sẽ gọi ở contrller nà hả bác. Vì controller các mục này sẽ không được gọi trực tiếp qua bootstrap được ạ ?
Chỉ trả lời phần 2, gọi $this->load->view(); trong file view (k phải trong controller).
sonnb viết 15:33 ngày 10/10/2018
Sidebar, Menu được xử lý Top Controller (Một số framework gọi là Front Controller). Ở View chỉ cần load biến đã xử lý ở Front Controller để hiển thị thôi chứ ko cần thao tác gì nữa cả. Front Controller là nơi xử lý những bước cơ bản nhất trước khi đẩy tới các Controller con, ví dụ: Check IP, Setup Visitor...
yeuyeulam viết 15:27 ngày 10/10/2018
Thank all. View thì e hiểu rùi nhưng chủ yếu e muốn biết các xây dựng controller và model của các phần tĩnh, cách gọi nó sao cho phù hợp ấy ạ. Đặt nó ở đâu để khi load các phần động khác thì phần tĩnh cũng chạy theo ấy ạ ?
tieudaochanhmuoi viết 15:33 ngày 10/10/2018
Thường thì các framework muốn giải quyết các phần tĩnh thì mình nghĩ có 3 cách.
1. Không cho load database vào controller
2. Sử dụng cache module
3. sử dụng cache query, nhưng về bản chất thì cache query vẫn phải connect database để có thể cập nhật dữ liệu theo thời gian quy định mà code bạn viết
Bài liên quan
0