30/09/2018, 18:01
Xử lý logic tại Controller hay Model?
Mình đang học CI, mình có một vài thắc mắc muốn nhờ các bạn giải đáp:
Theo hiểu biết MVC của mình: Model thao tác với cơ sở dữ liệu trả về dữ liệu cần tìm, Controller sẽ lấy dữ liệu trả về của Model đồng thời việc Controller sẽ dùng dữ liệu của Model để xử lý logic tại đây và truyền dữ liệu qua View.
- Việc mình xử lý logic tại Controller đã hợp lý chưa?
Controller
Model
View
- Lúc trước mình có dạo fb thì có vô tình đọc 1 cmt của một bạn k nhớ rõ tên nhưng bạn ý có nói là : tại Model cũng có thể xử lý Logic. Vậy xử lý logic tại Model có được không??
- Lúc trước mình có làm 1 web nho nhỏ nhưng gặp vấn đề mình k giải quyết được trong Controller. Nên mình đã lấy dữ liệu của Model ngay trong view mà không qua Controller tức là trong view mình gọi đến phương thức Model tương ứng để lấy dữ liệu. Mình làm như vậy có được không?
Bài liên quan
mình hay để phần xử lý form ở model và các các logic. còn lại điều hướng mình chuyển sang controller.
mình để logic ở controller, model của mình chỉ tương tác với database thôi
Nếu bạn áp dụng mô hình MVC một cách “lý tưởng” thì bạn sẽ có “Fat Model” + “Thin Controller”. Nghĩa là mọi business logic sẽ nằm ở Model, Controller chỉ nhận nhiệm vụ điều phối và xử lý những logic đơn giản giữa M và V là chính. Nếu trường hợp của bạn đơn giản quá thì bạn có thể để trong Controller luôn cũng được, miễn là bạn cảm thấy nó dễ bảo trì và phát triển thêm, không nhất thiết phải 100% theo design pattern
thông thường để rõ ràng nhất và linh hoạt thì phần business logic nên được xử lý ở một lớp trung gian được gọi là Service Layer tầng này sẽ xử lý những câu truy vấn đến database như Create, Update, Delete … Sau đó từ Controller chúng ta sẽ gọi tầng Service này lên để sử dụng.
Trước giờ mình chỉ nghe nói đến là xử lý logic, vậy business logic là gì vậy???
Business logic in MVC
Ai có thể liệt kê các trường hợp không thể để trong model không? Mình nghĩ nên liệt kê ra, mọi người cùng phân tích
Nếu bạn vẫn chưa hiểu rõ về MVC, thì mình khuyên bạn nên dành thời gian đọc qua quyển sách này (rất xúc tích, dễ hiểu và chứa nhiều design pattern phổ dụng khác). Mình ước gì mình đã đọc nó sớm hơn trước khi lao đầu vào các framework
Patterns of Enterprise Application Architecture (1st Edition) by Martin Fowler
amazon.com
Patterns of Enterprise Application Architecture
The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered object-oriented platforms, such as Java and .NET, have become common ...
4.2 out of 5 stars, ISBN: 978-0321127426, Addison-Wesley Professional, November 15, 2002, $41.84
code cơ bản nhìn tàm tạm nhưng không thoả mãn Single Responsibility Principle
Tôi cũng đang tự học, nhưng theo tôi thì nếu đã theo MVC thì nên phân tách rạch ròi M V và V, mỗi phần có nhiệm vụ riêng mặc dù có thể làm hộ nhau đc. Điều hướng là việc của anh router, xử lý logic là của anh C, M chỉ biết tuân lệnh anh C để thao tác với CSDL còn cuối cùng là anh V chỉ việc render dữ liệu nếu có, không đc xử lý gì tại view, như vậy cùng 1 form view có thể dùng cho nhiều controller đc và tận dụng sức mạnh của MVC. Chúc bạn thành công.
Đồng quan điểm với bạn. nên để trong service, tính tái sử dụng code cao hơn. Cách này tuy đơn giản mà hiệu quả, code dễ bảo trì.