Mọi người nghỉ lễ chắc vui vẻ nhỉ, thế là đã bắt đầu tuần làm việc mới. Hôm nay, mình sẽ chia sẻ tiếp với các bạn bài thứ 2 trong loạt bài làm “đạo diễn web” trong 7 ngày. Bài này sẽ nói về “nghệ sỹ”. Là một đạo diễn, sau khi có bản phác thảo nhân vật trong vở kịch thì việc tiếp theo là tìm kiếm các “nghệ sỹ” sẽ biểu diễn.
Ngày 2: Nghệ sỹ
Nghệ sỹ chính là những người sẽ tham gia các vai diễn đã được mô tả bởi đạo diễn. Trong “vở kịch web”, nếu các nhân vật là các bảng (table) trong cơ sở dữ liệu thì nghệ sỹ chính là…model.
Model là một trong 3 thành phần cơ bản của mô hình MVC (Model-View-Controller), đảm nhận vai trò xử lý các nghiệp vụ, chức năng chính (Busines Logic) của ứng dụng. Model là thành phần kết nối trực tiếp đến dữ liệu, đảm bảo mô hình nhiều tầng (layer) để dễ dàng debug, nâng cấp và chỉnh sửa khi có sự cố, lỗi xảy ra cho hệ thống code.
Framework
Ở ngày trước, chúng ta mới chỉ đụng đến database và các bảng trong đó mà chưa đụng gì đến code. Đến ngày hôm nay, bạn tiến hành viết những dòng code đầu tiên cho website của mình.
Tới đây, việc bạn lựa chọn framework cho riêng mình là một thế mạnh, vì hãy sử dụng một framework nào bạn thành thạo và có nhiều “công cụ” hỗ trợ sẽ giúp cho việc phát triển web nhanh chóng và hiệu quả hơn.
Hiện có nhiều PHP framework trên thế giới mà bạn có thể lựa chọn, từ phức tạp như Zend Framework cho đến đơn giản, gần gũi hơn như Codeigniter, Yii…Đối với mình thì framework nào cũng phức tạp hết (^^!) nên mình tự viết framework Litpi để dễ xài và cũng đã gần 3 năm rồi và mình rất ưng ý với framework cùi bắp của mình.
Model Structure
Có nhiều hướng tiếp cận để xây dựng một Model. Mục tiêu cơ bản của một Model là xử lý các nghiệp vụ liên quan đến Model được phân chia, giống như một nghệ sỹ phải diễn một số lời thoại, hành động nhất định theo mô tả trong kịch bản.
Model thường được thiết kế dạng Hướng đối tượng (Object-Oriented Programming – OOP) để dễ dàng cập nhật, debug và tái sử dụng. Nhìn chung, một Model class thường có một số phương thức cơ bản như thêm, cập nhật, xóa, tìm (theo ID hoặc các trường khác).
Model thường là ánh xạ 1:1 với các bảng trong database. VD nếu ta có bảng TAG thì ta sẽ có một class TAG tương ứng. Trong class TAG sẽ có các phương thức cơ bản (thêm, cập nhật, xóa, tìm kiếm…), các phương thức đặc thù business logic cho tag và các thuộc tính (thường là tương ứng với các cột trong bảng TAG).
Model Management
Thông thường, các Model thường được quản lý trong Backend (trang quản trị), tức là có trang quản lý việc thêm, cập nhật, xóa, tìm kiếm thông qua trình duyệt web nên các bạn phải làm thêm chức năng này trong Backend để người quản trị (Administrator) dễ dàng quản lý các thông tin dữ liệu Model và được tập trung về một mối chung (Backend).
Giao diện của trang quản lý Model thường không cần liên quan đến style của website bên ngoài (Front-end) và thường có dạng bảng hay lưới (grid) để dễ dàng liệt kê, xem và tìm kiếm thông tin nhanh nhất và dễ dàng thao tác cho người quản trị.
Hiện tại framework của mình có Backend sử dụng Twitter Bootstrap, có chế một chút Flat Design của theme Google để giữ cho layout của Backend sáng sủa, dễ lướt thông tin và thao tác.
Tuy nhiên, không phải 100% table trong database đều cần có chức năng quản trị. Một số table mình thường không làm chức năng quản trị như các table mở rộng cho 1 table khác (quan hệ 1:1, giúp giảm tải cho việc truy vấn, như table lit_ac_user_profile) hoặc một số table quan hệ (để lưu quan hệ n:n giữa các bảng với nhau)..
Model Generator
Trong ngày thứ 2 này, bạn sẽ dành trọn thời gian để làm việc với các Nghệ sỹ (Model) để chuẩn bị cho các ngày sau đó. Tùy theo kinh nghiệm của bạn thì việc tạo các class Model và các trang quản trị các Model sẽ mất ít hay nhiều thời gian.
Thông thường, các bạn sẽ tạo model bằng cách viết 1 Model class đầu tiên, sau đó, các Model class khác các bạn sẽ copy class đầu tiên, rồi chỉnh sửa tên table, tên cột, thuộc tính và các tiêu chí tìm kiếm để ra 1 Model Class hoàn chỉnh. Tương tự với các trang quản trị, bạn copy từ 1 chức năng quản trị của 1 Model nào đó, rồi chỉnh sửa các phương thức, input, form…để có các trang liệt kê, thêm, cập nhật, xóa…cho Model mới.
Cách làm ở trên sẽ mất khá nhiều thời gian nếu website của bạn có nhiều Model, đồng thời dễ bị lỗi do quá trình copy/edit không hết từ Model cũ. Để khắc phục các khó khăn đó, các framework hiện nay thường có công cụ hỗ trợ việc tạo Model và các chức năng quản trị tự động cho Model trong Backend (Code Generator).
Framework Litpi mà mình phát triển và đang sử dụng cũng có chức năng như thế. Nhờ sự giúp đỡ của Generator mà việc tạo ra các Model và trang quản lý rất nhanh, chỉ mất vài phút cấu hình, tùy chọn trong trang generator là có thể tạo ra 1 Model Class với một số tính năng dựng sẵn như có Class, các thuộc tính IP tự động dùng hàm getIPAddress() của framework, các tùy chọn nếu là dạng constant cũng được chuyển thành selectbox trong các trang thêm,cập nhật…
Hiện tại, Litpi framework mình để trên Github chưa có tính năng này vì version của framework hiện tại đã khác, hy vọng có thời gian để upgrade framework mới lên Github ^^!
Sau khi generator các Model, việc còn lại là bạn vào các class Model để thêm các business logic riêng cho Model đó. Lưu ý duy nhất ở bước này là bạn cần phải phân tích table càng chính xác và đầy đủ bao nhiêu thì sẽ hạn chế việc vào lại các class Model và trang quản trị để chỉnh sửa (như thêm cột ~ thuộc tính…), bởi vì mỗi khi chỉnh sửa hoặc là bạn phải generate Model lại (sẽ mất các phương thức, thuộc tính bạn khai báo thêm trong Model để hỗ trợ Busines Logic) hoặc vào từng class Model, trang quản trị để chỉnh sửa. Good Luck!
—–
Như vậy, sau ngày thứ 2, “vở kịch web” của bạn đã có đầy đủ các diễn viên và đã được phân vai rõ ràng với các nhiệm vụ và chức năng cụ thể.
Đón đọc bài tiếp theo “Ngày 3: Thiết kế sân khấu”
Bài viết của a rát hay và bổ ích. A có thể cho e xin source code framework Litpi để tham khảo đc ko ạ. E cảm ơn !
Cảm ơn bạn. Code của mình upload tại tài khoản github: http://github.com/voduytuan
@admin, Rất cám ơn Lipi Framework của admin
bài viết bổ ích, kinh nghiệm làm web thanks ad nhiều.
cho mình hỏi “thêm các business logic riêng cho Model đó” ở bước cuối là gì?