Đặt vấn đề Trong lĩnh vực công nghệ thông tin (CNTT), việc học hỏi và phát triển là vô cùng quan trọng. Tuy nhiên, với sự phát triển nhanh chóng của ngành, việc tự học và tự phát triển có thể gặp nhiều khó khăn. Trong bối cảnh đó, mô hình mentorship (cố vấn - học trò) trở thành một giải pháp hiệu quả để hỗ trợ sinh viên ngành CNTT trong quá trình học tập và phát triển. Lý do chọn đề tài Hiện nay có rất nhiều ứng dụng mô hình mentorship, nhưng trong trường học CNTT vẫn chưa có một ứng dụng cụ thể về mô hình này để kết nối những sinh viên có nhu cầu học tập, học hỏi kinh nghiệm từ những sinh viên giỏi, có kinh nghiệm hơn cả trong học tập và sự nghiệp.
Với lí do trên, em quyết định chọn đề tài này để phát triển một ứng dụng trực tuyến kết nối giữa mentor (người hướng dẫn) và mentee (người cần hướng dẫn) có tên là urMentor (Your Mentor), sử dụng trong môi trường trường học CNTT 1. Mục tiêu đề tài Xây dựng được một nền tảng giúp sinh viên hoặc giảng viên trong trường có thể kết nối được với nhau, giúp đỡ mentee phát triển trong vấn đề học tập và sự nghiệp của họ 1. Đối tượng nghiên cứu 1. Các công nghệ • Front-end: ReactJS, Typescript, Zustand, React-query, Tailwind-css • Back-end: Nestjs, Typescript, TypeORM • Database: Postgres 4 1.
Đối tượng sử dụng • Người cố vấn (mentor): sinh viên, giảng viên muốn chia sẻ kiến thức, kinh nghiệm cho sinh viên khác • Người được hướng dẫn (mentee): sinh viên muốn tìm một người mentor có thể giúp họ có phát triển kiến thức, kinh nghiệm, định hướng nghề nghiệp. • Quản trị viên (admin): người thực hiện các tác vụ quản lý hệ thống (tài khoản mentor, mentee, lĩnh vực, kỹ năng, giao dịch, mã quà tặng) 5 CHƯƠNG 2. Lý thuyết về phương pháp cố vấn Một vài cách tiếp cận phổ biến về phương pháp cố vấn: Cố vấn 1-1: Phương pháp này bao gồm một người cố vấn làm việc chặt chẽ với từng người được cố vấn, hỗ trợ và cung cấp các hướng dẫn, lời khuyên được cá nhân hóa phù hợp với nhu cầu và mục tiêu của người được cố vấn. Cố vấn theo nhóm: Trong phương pháp này, một người cố vấn làm việc với một nhóm nhỏ những người được cố vấn cùng một lúc.
Tư vấn nhóm khuyến khích việc học tập lẫn nhau, sự hợp tác và ý thức chung giữa những người được cố vấn. Cố vấn đảo ngược: Phương pháp này hướng đến việc kết nối một cá nhân trẻ hoặc ít kinh nghiệm hơn với một người cố vấn cao cấp và sở hữu nhiều kinh nghiệm hơn. Thông qua phương pháp này, người cố vấn có thể hiểu rõ hơn về các xu hướng và công nghệ mới nổi trội, trong khi người được cố vấn được hưởng lợi từ sự kiến thức và kinh nghiệm của người cố vấn. Cố vấn ảo: Bằng việc sử dụng công nghệ, người cố vấn và người được cố vấn có thể tham gia vào các mối quan hệ cố vấn bất kể các vấn đề liên quan đến vị trí địa lý.
ReactJS ReactJS là một thư viện JavaScript mã nguồn mở và miễn phí để xây dựng giao diện người dùng dựa trên các thành phần UI riêng lẻ. Nó được phát triển và duy trì bởi Meta và cộng đồng các nhà phát triển và công ty cá nhân. ReactJS được sử dụng để xây dựng các ứng dụng web, ứng dụng di động và các ứng dụng web cho thiết bị di động. Nó là một trong những thư viện JavaScript phổ biến nhất hiện nay, được sử dụng bởi các công ty lớn như Facebook, Instagram, Netflix, Airbnb, .1: ReactJs ReactJS có một số tính năng nổi bật, bao gồm: • Khả năng tái sử dụng cao: ReactJS sử dụng mô hình component- based, cho phép các nhà phát triển tạo các thành phần UI có thể tái sử dụng trong nhiều ứng dụng khác nhau.
• Tốc độ nhanh: ReactJS sử dụng virtual DOM để tối ưu hóa việc cập nhật giao diện người dùng, giúp các ứng dụng chạy nhanh và mượt mà. • Dễ học: ReactJS có cú pháp đơn giản và dễ hiểu, giúp các nhà phát triển mới bắt đầu dễ dàng học hỏi. Typescript TypeScript là một ngôn ngữ lập trình mã nguồn mở được phát triển và duy trì bởi Microsoft. Nó là một tập hợp siêu cú pháp nghiêm ngặt của JavaScript và thêm tính năng kiểu tĩnh tùy chọn vào ngôn ngữ.
TypeScript được thiết kế để phát triển các ứng dụng lớn và chuyển đổi sang JavaScript. Đặc điểm nổi bật của TypeScript • Kiểu dữ liệu tĩnh: TypeScript cho phép bạn xác định kiểu dữ liệu của biến, tham số, và giá trị trả về từ hàm. Điều này giúp phát hiện lỗi nhanh chóng trong quá trình phát triển và tăng tính rõ ràng của mã nguồn. • Tính mở rộng của JavaScript: TypeScript là một superset của JavaScript, điều này có nghĩa là mã nguồn JavaScript hợp lệ cũng là mã nguồn TypeScript hợp lệ.
Bạn có thể chuyển từ JavaScript sang TypeScript dần dần trong dự án mà không cần phải chuyển đổi toàn bộ mã nguồn cùng một lúc. 7 • Tích hợp với các công cụ phát triển: TypeScript có thể tích hợp dễ dàng với các công cụ phát triển như Visual Studio Code, Sublime Text, và các trình biên dịch khác để cung cấp trải nghiệm phát triển tốt hơn. • Kiểm tra kiểu tại thời điểm biên dịch: TypeScript thực hiện kiểm tra kiểu tại thời điểm biên dịch, giúp phát hiện lỗi trước khi chạy chương trình, giảm số lượng lỗi xảy ra tại thời điểm chạy. React Query Hình 2.3: React Query React Query là một thư viện quản lý trạng thái và dữ liệu cho ứng dụng React.
Nó được thiết kế để giải quyết các vấn đề liên quan đến việc tương tác với dữ liệu 8 từ các nguồn khác nhau, như API, và giúp quản lý trạng thái ứng dụng một cách hiệu quả. Dưới đây là một số đặc điểm nổi bật của React Query: • Quản lý trạng thái dữ liệu dễ dàng: React Query giúp bạn quản lý trạng thái dữ liệu của ứng dụng một cách dễ dàng và hiệu quả. Việc sử dụng các hooks như useQuery và useMutation giúp tối ưu hóa quá trình quản lý trạng thái và tương tác với dữ liệu. • Giảm boilerplate code: Thư viện này giảm bớt số lượng boilerplate code cần thiết để xử lý các tác vụ phổ biến như lấy dữ liệu từ API, caching, và tự động làm mới dữ liệu.
Điều này giúp mã nguồn trở nên ngắn gọn, dễ đọc, và dễ bảo trì hơn. • Tích hợp mạnh mẽ với React: React Query được thiết kế để hoạt động chặt chẽ với React, sử dụng các hooks để cung cấp khả năng quản lý trạng thái và tương tác dữ liệu. Điều này giúp đơn giản hóa quá trình tích hợp và sử dụng trong dự án React. • Hỗ trợ caching và làm mới dữ liệu: React Query có hệ thống caching mạnh mẽ, giúp tránh việc gửi các yêu cầu dữ liệu lặp lại và tối ưu hóa hiệu suất ứng dụng.
Nó cũng hỗ trợ tự động làm mới dữ liệu để đảm bảo rằng trạng thái dữ liệu luôn được cập nhật. • Xử lý side effects dễ dàng: React Query cung cấp các hooks như useMutation để xử lý các tác vụ phụ (side effects) như tạo mới, cập nhật, xóa dữ liệu một cách dễ dàng và có tổ chức. • DevTools hỗ trợ: React Query đi kèm với DevTools giúp theo dõi và debug trạng thái dữ liệu và các yêu cầu từ API một cách hiệu quả. Zustand Zustand là một thư viện quản lý trạng thái cho ứng dụng React.
Nó giúp quản lý trạng thái ứng dụng một cách dễ dàng và linh hoạt, đặc biệt được thiết kế để đơn giản hóa việc quản lý trạng thái trong các ứng dụng React. 9 Dưới đây là một số đặc điểm nổi bật của Zustand: • Kích thước nhỏ: Zustand có kích thước nhỏ và tập trung vào việc cung cấp một API dễ sử dụng mà không làm tăng kích thước của ứng dụng nhiều. • Cú pháp đơn giản: API của Zustand rất đơn giản, giúp giảm bớt boilerplate code và làm cho việc quản lý trạng thái trở nên thuận tiện hơn. Điều này làm cho zustand được ưu tiên tích hợp vào các dự án nhỏ và trung bình hơn so với redux • Tích hợp tốt với React: Zustand được xây dựng để tích hợp tốt với React, sử dụng React Hooks để quản lý trạng thái.
Điều này giúp tận dụng các lợi ích của React Hooks và làm cho việc sử dụng Zustand trở nên tự nhiên trong môi trường React. • Hỗ trợ middleware: Zustand hỗ trợ middleware, giúp bạn mở rộng chức năng và tùy chỉnh quy trình xử lý trạng thái.4: NestJs NestJS là một framework phát triển web back-end cho Node.js, được thiết kế để tạo ra ứng dụng server-side hiệu quả và dễ bảo trì. NestJS kết hợp các đặc điểm của TypeScript (hoặc JavaScript) với các kiến trúc và ý tưởng từ Angular, tạo ra một môi trường phát triển mạnh mẽ cho xây dựng ứng dụng web. 10 Dưới đây là một số điểm nổi bật của NestJS: • Kiến trúc modular: NestJS thúc đẩy việc sử dụng kiến trúc modular, giúp tạo ra mã nguồn dễ bảo trì và linh hoạt.
Ứng dụng có thể được chia thành các module độc lập với các thành phần như controllers, providers, và middleware. • Sử dụng TypeScript: NestJS được xây dựng hoàn toàn bằng TypeScript, một ngôn ngữ lập trình mở rộng của JavaScript với kiểu dữ liệu tĩnh. Điều này giúp giảm lỗi trong quá trình phát triển và tăng tính rõ ràng của mã nguồn. • Decorator-based syntax: NestJS sử dụng cú pháp dựa trên decorator để đánh dấu các thành phần như controllers, modules, routes, và middleware.
Điều này giúp mã nguồn trở nên rõ ràng và dễ đọc hơn. • Dependency Injection: NestJS hỗ trợ Dependency Injection (DI), giúp quản lý và đưa các phụ thuộc vào ứng dụng một cách hiệu quả. Điều này cũng tạo điều kiện cho việc kiểm thử và tái sử dụng mã nguồn. • Middleware-based approach: NestJS sử dụng middleware để xử lý các yêu cầu HTTP trước khi đến đối tượng xử lý chính.
Điều này cung cấp khả năng kiểm soát cao và tối ưu hóa quá trình xử lý.5: TypeORM 11 TypeORM là một thư viện ORM (Object-Relational Mapping) cho TypeScript và JavaScript, được sử dụng để tương tác với cơ sở dữ liệu trong các ứng dụng Node.js và TypeScript. ORM giúp quản lý truy vấn cơ sở dữ liệu và tương tác với dữ liệu một cách trừu tượng hóa, sử dụng các đối tượng và lớp thay vì các truy vấn SQL trực tiếp. Dưới đây là một số đặc điểm và lợi ích của TypeORM: • Hỗ trợ nhiều cơ sở dữ liệu: TypeORM hỗ trợ nhiều loại cơ sở dữ liệu như MySQL, PostgreSQL, MariaDB, SQLite, Microsoft SQL Server, Oracle, và nhiều hệ thống cơ sở dữ liệu khác.