Bối cảnh và vấn đề nghiên cứu

Trong quy trình phát triển ứng dụng web hiện đại, khối lượng công việc của các lập trình viên Front-end ngày càng gia tăng. Trong thực tế triển khai dự án, các lập trình viên thường xuyên phải lặp lại các đoạn mã nguồn HTML, CSS và JavaScript tương tự nhau giữa nhiều dự án khác nhau. Khi cần tái sử dụng mã nguồn, giải pháp phổ biến hiện nay là tìm kiếm và sao chép thủ công từ các sản phẩm đã thực hiện trước đó. Tuy nhiên, việc tra cứu trong một tập hợp lớn các dự án cũ gặp nhiều trở ngại về thời gian và khả năng quản lý cấu trúc tập tin.

Về bối cảnh thực tiễn sản xuất phần mềm, tác giả chỉ ra rằng đối với một dự án web có yêu cầu thiết kế riêng biệt cho khách hàng, một nhóm tiêu chuẩn gồm ít nhất 5 lập trình viên và 1 người thiết kế web thường cần tối thiểu 1 tháng để hoàn thành. Nếu các thành phần giao diện được chia nhỏ, chuẩn hóa và lưu trữ bài bản, nhóm phát triển có thể tái sử dụng trực tiếp cho các dự án sau có cấu trúc tương đồng, giúp gia tăng đáng kể hiệu suất lao động và năng lực cung ứng.

Khóa luận "Xây dựng hệ thống thư viện giao diện cho ứng dụng web" (Build A Website Application Interface Library System) của tác giả Đặng Khiết Nghi (Khoa Mạng máy tính và Truyền thông, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh, thực hiện năm 2021 dưới sự hướng dẫn của ThS. Trần Tuấn Dũng) được triển khai nhằm giải quyết trực tiếp bài toán này.

Mục tiêu nghiên cứu của đề tài:

  1. Xây dựng hệ thống thư viện giao diện hoạt động trên nền tảng web với cơ chế ngoại tuyến (offline), không phụ thuộc vào kết nối mạng Internet.
  2. Cung cấp chức năng lưu trữ và quản trị thư mục thông qua các thao tác thêm, xóa.
  3. Cung cấp chức năng lưu trữ và quản trị giao diện thông qua các thao tác thêm, chỉnh sửa.
  4. Quản lý tập tin và thư mục với công cụ tìm kiếm theo từ khóa (keyword) và ngày khởi tạo.
  5. Hỗ trợ tạo lập giao diện mới bằng cách ghép nối (merge) các thành phần giao diện sẵn có.
  6. Cung cấp tính năng trực quan hóa (visual preview) các giao diện đã lưu trên hai chuẩn màn hình desktop và mobile.
  7. Hỗ trợ trích xuất (export) mã nguồn giao diện sau khi ghép để lập trình viên tích hợp vào dự án thực tế.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Các thành phần giao diện web. Mỗi giao diện được chuẩn hóa lưu trữ dưới dạng một thư mục chứa đầy đủ 3 tập tin thành phần: HTML, CSS và JavaScript.
  • Phạm vi nghiên cứu: Lưu trữ, quản lý cấu trúc cây thư mục và các tập tin .html, .css, .js. Hệ thống hoạt động theo cơ chế cục bộ (offline) trên từng máy trạm của lập trình viên, không yêu cầu xác thực tài khoản người dùng trực tuyến.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và công nghệ nền tảng

Tác giả tổng hợp nền tảng công nghệ web bao gồm cả phía máy khách (Client-side) và máy chủ (Server-side):

  • Ngôn ngữ đánh dấu và định dạng (HTML & CSS):
    • HTML (Hypertext Markup Language): Đóng vai trò thiết lập khung sườn, cấu trúc ngữ nghĩa cho tài liệu web (headings, paragraphs, lists, links, forms, tags đa phương tiện).
    • CSS (Cascading Style Sheets): Chuẩn hóa hiển thị theo mô hình hộp (Box Model gồm padding, border, margin). Cấu trúc khai báo gồm bộ chọn (Selector: theo tag, class, id, phân cấp) kết hợp khối khai báo (Declaration) chứa thuộc tính (Property) và giá trị (Value).
  • Ngôn ngữ JavaScript phía Client (Client-Side JavaScript): Ngôn ngữ kịch bản chạy trong ngữ cảnh trình duyệt, hỗ trợ xử lý sự kiện tương tác, xác thực dữ liệu đầu vào tại biểu mẫu trước khi gửi lên server, xử lý kéo thả (Drag and Drop) và thanh trượt. Văn bản chỉ rõ các hạn chế kỹ thuật của Client-side JS gồm: không thể đọc/ghi trực tiếp hệ thống tệp cục bộ do rào cản bảo mật trình duyệt, không hỗ trợ đa luồng (multi-threading) hay đa xử lý tích hợp sẵn.
  • Thư viện giao diện và tiện ích Front-end:
    • jQuery (phiên bản khởi nguồn từ 2006 của John Resig): Đơn giản hóa thao tác DOM, xử lý sự kiện, hiệu ứng động và truyền thông bất đồng bộ qua mô-đun Ajax, phân tích JSON.
    • Bootstrap Framework: Khung giao diện cung cấp hệ thống lưới Responsive định sẵn cho desktop, tablet và mobile; tích hợp các thành phần giao diện (Typography, Forms, Modals, Carousels) và bộ biểu tượng Halflings Glyphicons.
  • Ngôn ngữ phía Server (PHP): Ngôn ngữ Hypertext Preprocessor chạy trên máy chủ. Tác giả trình bày chi tiết quy trình 4 giai đoạn thực thi mã nguồn của PHP Engine:
    1. Lexing (Tokenizing): Chuyển mã nguồn thành chuỗi token có định danh bằng công cụ re2c.
    2. Parsing: Bộ phân tích cú pháp BNF sử dụng Bison cấu trúc LALR kiểm tra tính hợp lệ ngữ pháp và tạo cây cú pháp trừu tượng (Abstract Syntax Tree - AST).
    3. Compiling: Duyệt đệ quy cây AST để sinh mã tác vụ (Opcodes), tối ưu hóa lời gọi hàm (kiểm tra qua VLD, PHPDBG, OPcache).
    4. Interpreter: Thực thi opcodes trên máy ảo Zend Engine VM và trả về luồng dữ liệu cho web server (Apache).
  • Hệ thống quản lý phiên bản và môi trường phát triển:
    • Git: Quản lý lịch sử mã nguồn phân tán, cơ chế phân nhánh (Branching), commit và hợp nhất (Merge).
    • JetBrains PhpStorm: Môi trường phát triển tích hợp (IDE) hỗ trợ gỡ lỗi trực quan (Xdebug, Zend Debugger), kiểm thử đơn vị với PHPUnit và tính năng Live Edit.

Phương pháp nghiên cứu và nguồn dữ liệu

  • Phương pháp khảo sát hiện trạng: Đánh giá các giải pháp tạo dựng giao diện và mã nguồn mẫu hiện có trên thị trường như WordPress, Wix. Nghiên cứu chỉ ra các công cụ này chủ yếu hướng đến người làm thiết kế đồ họa, mã nguồn sinh ra tự động có cấu trúc phức tạp, chưa tối ưu hóa hiệu năng, gây cản trở cho lập trình viên Front-end khi cần tùy biến chuyên sâu hoặc tối ưu điểm số SEO theo tiêu chuẩn của Google.
  • Phương pháp phân tích và thiết kế phần mềm: Áp dụng phương pháp phân rã chức năng (Functional Decomposition), mô hình hóa tương tác qua sơ đồ Use Case và biểu đồ tuần tự (Sequence Diagram/Diagram quy trình) để thiết kế luồng dữ liệu giữa giao diện, API và cơ sở dữ liệu.
  • Nguồn dữ liệu: Dữ liệu thử nghiệm cục bộ gồm các gói giao diện mẫu (chẳng hạn các mẫu: MuaXuan, NgayMua, ThienNhien) cùng chỉ mục tra cứu từ khóa searchData.json.

Thiết kế và triển khai hệ thống

Kiến trúc hệ thống 3 lớp

Hệ thống được tổ chức thành mô hình 3 thành phần chính:

[ Giao diện hệ thống (View) ] <---> [ Bộ xử lý trung gian (API) ] <---> [ Lưu trữ dữ liệu (DB/Filesystem) ]
Thành phần Vai trò kỹ thuật Cấu trúc tập tin / Thư mục chính
Giao diện (View) Quản lý việc nhận dữ liệu từ PHP và hiển thị lên trình duyệt. Tách bạch giữa logic hiển thị (.php) và mẫu giao diện (.tpl). module/, ajax/, homepage/, newwebsite.php, website.php, search.tpl, website.tpl
Giao tiếp logic (API) Tiếp nhận yêu cầu từ View, kiểm tra tính hợp lệ của đường dẫn/tệp/biến, thao tác với hệ thống lưu trữ và trả kết quả phản hồi. createFolder.php, createProject.php, deleteAllUploadFiles.php, getDirectory.php, validateUploadFile.php, addFilesToProject.php, addTemplate.php, keepCreateTemplate.php, mergeFiles.php
Lưu trữ (DB) Quản lý cấu trúc cây thư mục vật lý và siêu dữ liệu tra cứu của các dự án giao diện. Thư mục data/ gồm: root/ (chứa các thư mục dự án giao diện thực tế), projectdefault/, mergingproject/, newtemplate/, uploads/, permission/, searchData.json

Luồng xử lý các chức năng cốt lõi

  1. Thêm thư mục mới: View gửi yêu cầu kèm đường dẫn hiện tại và tên thư mục mới đến API createFolder.php. API kiểm tra đường dẫn tồn tại trên máy chủ, đối chiếu danh sách thư mục từ DB để tránh trùng tên. Nếu hợp lệ, hệ thống tạo thư mục mới và trả thông báo thành công.
  2. Thêm dự án mới: Khi người dùng tạo dự án, API createProject.php tạo thư mục dự án tại đường dẫn chỉ định và tự động nạp sẵn 3 tập tin mẫu mặc định (HTML, CSS, JS) từ thư mục projectdefault.
  3. Tải lên và xử lý tệp (Upload): Người dùng tải tệp mã nguồn vào dự án thông qua validateUploadFile.php và addFilesToProject.php. Hệ thống cung cấp 2 chế độ:
    • Ghi đè (Overwrite): Thay thế tập tin cũ có cùng phần mở rộng trong dự án.
    • Gộp tệp (Merge): Ghép nối nội dung tệp mới vào tệp cũ cùng loại, đồng thời hệ thống thực hiện kiểm tra xung đột tên biến JavaScript/CSS để cảnh báo lỗi trùng lặp cho lập trình viên.
  4. Tạo giao diện mới từ nhiều mẫu có sẵn: Người dùng chọn nhiều dự án trong thư viện. API mergeFiles.php thực hiện gộp nội dung các tệp HTML, CSS, JS tương ứng, kiểm tra biến trùng, hiển thị trực quan bản xem trước và cho phép người dùng trích xuất (export) toàn bộ gói mã nguồn sang một đường dẫn thư mục tùy chọn trên máy.
  5. Tìm kiếm dự án theo từ khóa: API quét qua tập tin siêu dữ liệu searchData.json và nội dung bên trong các tệp mã nguồn để trả về danh sách dự án khớp với từ khóa, hiển thị kèm đường dẫn lưu trữ và mốc thời gian cập nhật gần nhất.

Nội dung chính theo từng chương

Chương 1. Giới thiệu đề tài

Chương này xác định tính cấp thiết của việc xây dựng hệ thống lưu trữ và quản lý giao diện web cục bộ cho lập trình viên Front-end. Tác giả trình bày mục tiêu xây dựng công cụ chạy web offline, phân tích tầm quan trọng trong việc cắt giảm thời gian viết lại mã nguồn cũ, nâng cao năng suất nhóm dự án (từ mốc tiêu chuẩn 5 lập trình viên + 1 thiết kế/tháng). Chương này cũng quy định rõ đối tượng là các thư mục giao diện chuẩn gồm 3 tệp HTML, CSS, JS và phương pháp kết hợp PHP, Bootstrap, jQuery.

Chương 2. Ngôn ngữ lập trình và công nghệ hỗ trợ

Chương 2 trình bày chi tiết cơ sở lý thuyết của các công nghệ xây dựng hệ thống:

  • Trình bày kiến trúc thông dịch 4 bước của PHP (Lexing, Parsing, Compiling, Interpreter) và mô hình LAMP.
  • Trình bày đặc tính của JavaScript phía client, vai trò của HTML trong việc định nghĩa cấu trúc ngữ nghĩa và CSS trong định dạng giao diện theo mô hình hộp.
  • Giới thiệu hệ thống quản lý mã nguồn phân tán Git (nhánh master, commit, merge) và các tính năng của IDE JetBrains PhpStorm (phân tích mã, Live Edit, PHPUnit, Xdebug).
  • Giới thiệu thư viện jQuery (các mô-đun Ajax, Selector, DOM) và framework Bootstrap (cấu trúc CSS, JavaScript kết hợp jQuery, Halflings Glyphicons).
  • Mô tả kiến trúc 3 thành phần của hệ thống thư viện: thư mục Database (data/), thư mục API/ và thư mục View/.

Chương 3. Khảo sát hiện trạng

Chương 3 khảo sát thực trạng các công cụ tạo website hiện có như WordPress và Wix. Tác giả phân tích các hạn chế: giao diện tạo sẵn khó tùy biến, mã nguồn tự động sinh ra bị cồng kềnh, cấu trúc phức tạp gây khó khăn cho việc can thiệp mã nguồn Front-end thủ công và chưa đáp ứng tốt tiêu chuẩn tối ưu hóa của Google. Từ đó, tác giả đúc kết danh mục yêu cầu chức năng cho hệ thống: quản lý cây thư mục, tạo/xóa thư mục, tạo/sửa dự án, tìm kiếm theo nội dung tệp và hiển thị mốc thời gian chỉnh sửa mới nhất.

Chương 4. Phân tích hệ thống

Chương 4 tập trung vào việc mô hình hóa hệ thống thông qua các công cụ phân tích phần mềm:

  • Sơ đồ kiến trúc luồng dữ liệu tổng quát giữa Giao diện, API và Database.
  • Mô hình phân rã chức năng nhằm bao quát toàn bộ phạm vi hệ thống.
  • Bảng mô tả chi tiết các Use Case chính: Use case tổng quan (Bảng 1), Quản lý thư mục và dự án (Bảng 2), Màn hình tạo giao diện mới (Bảng 3), Chức năng tìm kiếm theo từ khóa (Bảng 4).
  • Các biểu đồ quy trình tương tác từng bước (Sequence Diagrams) cho 5 tác vụ cốt lõi: Thêm thư mục (9 bước), Xóa thư mục (4 bước), Thêm dự án mới (9 bước), Upload tệp vào dự án (12 bước bao gồm xử lý ghi đè/gộp mã) và Tìm kiếm dự án theo từ khóa.

Chương 5. Hiện thực ứng dụng

Chương 5 minh họa kết quả triển khai giao diện người dùng thực tế của hệ thống, bao gồm các màn hình chức năng:

  • Giao diện quản lý thư mục và dự án tại cấp gốc (root) và hiển thị chi tiết các tệp trong từng dự án.
  • Biểu mẫu (Form) nhập liệu thêm thư mục mới và form thêm dự án mới.
  • Biểu mẫu tải lên tập tin (Form Upload File) với tùy chọn đè hoặc gộp nội dung.
  • Giao diện trang tạo giao diện mới, form ghép các giao diện thành phần và màn hình kết quả tìm kiếm dự án.

Chương 6. Kết quả và hướng phát triển

Chương tổng kết đánh giá mức độ hoàn thành các mục tiêu ban đầu của đồ án và đề xuất các định hướng mở rộng hệ thống trong tương lai.


Kết quả và đóng góp

Kết quả kỹ thuật đạt được

  • Hiện thực hóa trọn vẹn hệ thống thư viện giao diện web chạy offline: Xây dựng ứng dụng web cục bộ độc lập, không yêu cầu người dùng phải đăng ký tài khoản hay kết nối máy chủ bên ngoài.
  • Hoàn thành các mô-đun quản lý và xử lý mã nguồn:
    • Quản lý cấu trúc cây thư mục, hỗ trợ tạo dự án mới đi kèm 3 tệp tiêu chuẩn (.html, .css, .js).
    • Xử lý tải lên tệp với hai cơ chế rõ ràng: ghi đè tệp cũ hoặc gộp nội dung tệp.
    • Tích hợp thuật toán kiểm tra xung đột tên biến khi thực hiện thao tác gộp nhiều thành phần giao diện.
    • Cung cấp khung xem trước trực quan (Live Visual Preview) đồng thời trên hai định dạng màn hình desktop và mobile mà không cần mở mã nguồn thô.
    • Hỗ trợ công cụ tìm kiếm dự án theo từ khóa quét trực tiếp nội dung tệp và hiển thị ngày chỉnh sửa cuối cùng.
    • Trích xuất toàn bộ gói tệp sau khi ghép nối sang thư mục đích trên máy tính.

Bảng tổng hợp các chức năng hệ thống

Nhóm chức năng Tác vụ cụ thể Cơ chế xử lý
Quản trị thư mục & dự án Tạo thư mục, xóa thư mục, tạo dự án mới Kiểm tra trùng tên, tự động nạp 3 tệp mẫu mặc định vào dự án mới
Quản lý tập tin Xem danh sách tệp, upload tệp mã nguồn Lựa chọn ghi đè (overwrite) hoặc gộp mã (merge)
Xử lý giao diện Ghép nhiều giao diện thành giao diện mới Gộp nội dung HTML/CSS/JS, rà soát trùng lặp biến
Trực quan hóa Xem trước giao diện Hiển thị responsive trên Desktop và Mobile
Truy vấn & Xuất bản Tìm kiếm theo keyword, xuất file Quét nội dung tệp qua searchData.json, sao chép tệp ra thư mục đích

Đóng góp thực tiễn do tác giả nêu

  • Đề xuất một giải pháp lưu trữ và quản lý tập trung các thành phần giao diện đã qua phát triển, khắc phục tình trạng phân mảnh mã nguồn ở các lập trình viên Front-end.
  • Loại bỏ thao tác sao chép thủ công mất thời gian, giải quyết bài toán lặp lại các đoạn mã HTML/CSS/JS giữa các dự án web có cấu trúc tương đương.
  • Khắc phục các nhược điểm của các trình tạo web tự động (như WordPress, Wix) bằng cách giữ nguyên cấu trúc mã nguồn thuần, sạch, giúp lập trình viên dễ dàng tùy chỉnh và tối ưu hóa hiệu năng sau khi trích xuất.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế được ghi nhận

  • Cơ chế lưu trữ: Dữ liệu thư mục và chỉ mục tìm kiếm phụ thuộc vào cấu trúc tệp cục bộ và tập tin JSON (searchData.json), chưa tích hợp một hệ quản trị cơ sở dữ liệu quan hệ hoàn chỉnh (RDBMS) để quản lý phân quyền phức tạp.
  • Ràng buộc Client-Side JavaScript: Do chạy trên trình duyệt web, các thao tác đọc/ghi hệ thống tập tin cấp thấp bị hạn chế bởi chính sách bảo mật trình duyệt, buộc phải phụ thuộc vào lớp API máy chủ PHP trung gian để can thiệp hệ thống tệp.
  • Xử lý xung đột mã nguồn: Quá trình gộp tệp tự động mới dừng lại ở mức kiểm tra các biến bị trùng tên cơ bản, chưa có bộ phân tích cú pháp nâng cao để giải quyết triệt để các xung đột phức tạp về mặt phạm vi biến (scope) hay ghi đè bộ quy tắc CSS (CSS specificity).

Hướng phát triển tiếp theo

  • Hoàn thiện và nâng cao độ chính xác của thuật toán phân tích, kiểm tra xung đột biến và quy tắc CSS khi ghép nối nhiều giao diện phức tạp.
  • Nâng cấp công cụ tìm kiếm nội dung, hỗ trợ lập chỉ mục sâu hơn cho nhiều định dạng tệp khác nhau.
  • Tối ưu hóa giao diện người dùng và mở rộng khả năng quản lý thư viện component theo các chuẩn framework Front-end hiện đại.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo thiết thực cho:

  • Sinh viên ngành Mạng máy tính, Truyền thông và Công nghệ thông tin: Là tài liệu tham khảo hoàn chỉnh về quy trình xây dựng đồ án tốt nghiệp kỹ sư phần mềm, từ khâu khảo sát, đặc tả yêu cầu, thiết kế kiến trúc Use Case/Sequence Diagram đến hiện thực hóa mã nguồn PHP/Bootstrap/jQuery.
  • Lập trình viên Front-end và thiết kế web: Tham khảo giải pháp tổ chức, đóng gói các khối giao diện (UI components) dưới dạng các mô-đun độc lập (HTML, CSS, JS) để phục vụ tái sử dụng mã nguồn.
  • Người nghiên cứu kiến trúc ứng dụng web: Đáng tham khảo ở chương 2 (phần phân tích 4 giai đoạn thực thi mã nguồn của PHP Engine) và chương 4 (phần thiết kế luồng xử lý chi tiết cho các tác vụ quản lý tập tin và kiểm tra xung đột khi ghép nối mã nguồn).

Câu hỏi thường gặp

1. Mỗi thành phần giao diện trong hệ thống được cấu trúc lưu trữ như thế nào?
Mỗi giao diện được lưu trữ thành một thư mục riêng biệt bên trong hệ thống lưu trữ (data/root/), bên trong bắt buộc chuẩn hóa gồm 3 tập tin mã nguồn: một tệp HTML, một tệp CSS và một tệp JavaScript.

2. Hệ thống xử lý như thế nào khi người dùng tải lên một tệp mã nguồn trùng đuôi mở rộng với tệp đã có trong dự án?
Hệ thống cung cấp hai tùy chọn xử lý: (1) Ghi đè (Overwrite) – tệp mới sẽ thay thế hoàn toàn và xóa tệp cũ; (2) Gộp tệp (Merge) – nội dung của tệp mới sẽ được nối tiếp vào tệp cũ, đồng thời API sẽ kích hoạt quy trình kiểm tra xem có biến JavaScript nào bị trùng lặp hay không để đưa ra cảnh báo.

3. Khóa luận giải thích quy trình thực thi mã nguồn của ngôn ngữ PHP qua những giai đoạn nào?
Khóa luận trình bày quy trình thực thi của PHP qua 4 giai đoạn: (1) Lexing/Tokenizing (chuyển mã nguồn thành token bằng re2c); (2) Parsing (tạo cây cú pháp trừu tượng AST qua Bison BNF); (3) Compiling (biên dịch AST thành opcodes và tối ưu hóa); (4) Interpreter (mã tác vụ chạy trên máy ảo Zend Engine VM để sinh kết quả).

4. Tại sao hệ thống thư viện này lại hoạt động ở chế độ ngoại tuyến (offline) và không yêu cầu đăng nhập?
Hệ thống được thiết kế hướng đến việc phục vụ trực tiếp từng lập trình viên Front-end làm việc cục bộ trên máy trạm cá nhân, cho phép thao tác quản lý, chỉnh sửa, xem trước và xuất mã nguồn nhanh chóng mà không cần phụ thuộc vào đường truyền mạng Internet hay thủ tục đăng ký/xác thực tài khoản.


Kết luận

Khóa luận tốt nghiệp của tác giả Đặng Khiết Nghi đã giải quyết bài toán tái sử dụng mã nguồn Front-end thông qua việc thiết kế và xây dựng thành công hệ thống thư viện giao diện web cục bộ. Bằng việc kết hợp kiến trúc 3 thành phần (DB, API, View) với nền tảng công nghệ PHP, JavaScript, jQuery và Bootstrap, hệ thống đáp ứng đầy đủ các chức năng quản lý cây thư mục, tìm kiếm nội dung, trực quan hóa giao diện trên desktop/mobile và ghép nối mã nguồn tự động. Đồ án cung cấp một tài liệu kỹ thuật có cấu trúc phân tích hệ thống chặt chẽ, mang lại giá trị tham khảo rõ ràng cho sinh viên chuyên ngành công nghệ thông tin và các lập trình viên phát triển ứng dụng web.