Ý tưởng

Sau 1 hồi câu kéo đủ 30 likes, mình quyết định thực hiện ý tưởng: làm 1 cái web framework bằng golang. Mục tiêu đơn giản thôi. Làm 1 cái frame work đơn giản dễ hiểu, có khả năng mở rộng cao, có thể phục vụ hàng tỉ yêu cầu, cho hàng triệu system engineer sử dụng. Framework sẽ sử dụng các nguyên lý, kiến thức cơ bản, dễ hiểu đối với mọi người, để ai cũng có thể hiểu, mở rộng, phát triển framework này. Hơn nữa, framework này sẽ là một mô hình để mọi người có thể hiểu cơ chế hoạt động của các framework hiện đại.

Tại sao lại là go

Những ngôn ngữ chúng ta hay sử dụng: C, C++, Java, Python, PHP, Javascript,… đều là các ngôn ngữ từ “thời tiền sử”.
Máy tính năm 1995, CPU 75Mhz, RAM 8MB.
Cấu hình năm 1995

RAM 8MB còn nhỏ hơn 1 bức ảnh bây giờ. Ảnh chụp bằng Sony A7 nặng 13MB.
Ảnh chụp bằng Sony A7

Các ngôn ngữ cũ được thiết kế trên máy 1 luồng cpu, và không tận dụng được các CPU hiện đại. 1 Luồng chạy hộc máu, 47 cái còn lại ngồi chơi :-?
CPU 24 nhân,48 luồng

Go ra đời nhằm giải quyết vấn đề đó. Một ngôn ngữ được thiết kế để đễ dàng chạy đồng thời trên 48 luồng. Like a boss :))

Tại sao lại là web framework

Đã tập code đẻ học ngôn ngữ mới thì phải code cái gì pro tí. Chả nhẽ suốt ngày Hello world. Trẻ con lớp 2 cũng code được.

Mô hình framework

Mình sử dụng mô hình “quốc dân”, khá dễ hiểu: MVC. MVC là viết tắt của Model - View - Controller
Mô hình web framework hiện đại có thêm 1 lớp phụ là Router. (chém gió thế chứ mình cũng chả biết framework cổ dại trông ntn)
Chức năng cơ bản của các thành phaanf như sau:

  • Router: Chuyển yêu cầu truy cập của người dùng đến Controller tương ứng.
  • Controller: Thực hiện các chức năng chính của hệ thống, giao tiếp với Model để xử lí dữ liệu:yêu cầu tìm, thêm, sửa, xóa, …
  • Model: Thao tác với cơ sở dữ liệu theo yêu cầu của Controller
  • View: hiển thị thông tin, dữ liệu cần thiết cho người dùng.

MVC

Quy trình như sau:

  • 1.Người dùng gửi yêu cầu
  • 2.Router chuyển yêu cầu đến Controller thích hợp
  • 3.Controller làm việc với Model để có dữ liệu cần thiết. Model lấy, ghi dữ liệu từ Database
  • 4.Controller gọi View để trình bày kết quả.
  • 5.View trình bày kết quả và hiển thị cho người dùng.

    Ý tưởng đại khái là như bao framework khác. [Của mình phải pro hơn chứ :p]