Mẫu thiết kế (Design Pattern) đại diện cho các phương pháp tốt nhất thường được sử dụng bởi các nhà phát triển phần mềm có kinh nghiệm. Mẫu thiết kế là các giải pháp cho các vấn đề chung mà các nhà phát triển phần mềm gặp phải trong quá trình phát triển phần mềm. Những giải pháp này được rút ra từ thời gian dài thử nghiệm và lỗi của nhiều nhà phát triển phần mềm.
Lời mở đầu
Gần đây tôi khá bận, và công việc hiện tại cũng không phù hợp để viết bài, nên lâu rồi không cập nhật bài viết...
Gần đây tôi nhận một yêu cầu nhỏ, cần thực hiện cả phần frontend và backend, tôi đã nghĩ đến dùng full TS cho cả FE và BE. Tôi đã sử dụng NestJS vài năm trước, nhưng những năm này thì tôi chủ yếu sử dụng Spring Boot là chính, nên tôi muốn nhớ lại và học thêm những cải tiến mới của Nest.js
.
Lời mở đầu
Trong bài viết trước, chúng ta đã hoàn thành phần thực hành Nest.js, nếu bạn chưa bắt đầu thì hãy đọc nó trước! ở đây đã giới thiệu cho bạn về Nest.js
. Tiếp theo, chúng ta sẽ tiếp tục phát triển dựa trên mã trước đó, với hai nhiệm vụ chính: thực hiện đăng ký và đăng nhập cho người dùng.
Lời nói đầu
Bài viết này là phần tiếp theo của bài viết trước Triển khai đăng nhập và đăng ký. Ban đầu, các nội dung này dự định sẽ được viết trong một bài, nhưng do vấn đề về độ dài nên đã tách ra thành phần này.
Có thể một số bạn nghĩ bài viết chỉ là về thêm, sửa, xóa, nên không có gì đáng chú ý. Nhưng khi hoàn thành xong, mình nhận ra bài viết này đề cập nhiều kiến thức hữu ích, chẳng hạn như thống kê lượng đọc bài viết, xử lý quan hệ một-nhiều giữa bảng phân loại và bảng bài viết, nhiều-nhiều giữa bảng bài viết và bảng thẻ, tải lên tệp, v.v. Ngoài ra, còn có những chi tiết thú vị như cách trích xuất tóm tắt bài viết, chuyển đổi Markdown
sang HTML
, tất cả sẽ được giải thích kỹ trong bài viết này.
1. Giới thiệu
Bài viết này mô tả thuật toán đồng thuận phân tán Raft và cách thực hiện hoàn chỉnh của nó trong Go.
Raft là một thuật toán tương đối mới (2014), nhưng nó đã được sử dụng nhiều trong ngành. Nổi tiếng nhất là K8s , dựa trên Raft thông qua kho lưu trữ khóa-giá trị phân tán etcd.
Giới thiệu
Cá nhân tôi thiên về backend developer và không mạnh về frontend, gần đây tôi đang suy nghĩ về việc làm freelancer nên tôi bắt đầu nâng cấp kĩ năng frontend của mình với NextJs (version 14). Bài viết này do tôi nhanh chóng tổng kết lại quá trình phát triển của mình...
Quy trình phát triển
Tôi đã sắp xếp lại quá trình phát triển phiên bản GoFrame V2 mới nhất:
- Thiết kế cấu trúc bảng dữ liệu, khởi tạo dự án, sửa đổi file cấu hình
- Sử dụng
gf gen dao
để tạo dao/do/model tương ứng với các bảng - Viết lớp api: xác định cấu trúc dữ liệu phía nghiệp vụ và cung cấp cấu trúc dữ liệu đầu vào/đầu ra của api bên ngoài
- Viết lớp model: xác định cấu trúc dữ liệu ở phía dữ liệu và cung cấp cấu trúc dữ liệu đầu vào/đầu ra để xử lý dữ liệu nội bộ.
- Viết lớp logic và tự động tạo mã lớp dịch vụ. (Nó có thể được tạo tự động bằng cách định cấu hình Goland File Watcher hoặc có thể được tạo thủ công thông qua dịch vụ
gf gen
. Nên sử dụng cái trước) - Sau khi mã lớp dịch vụ tạo ra phương thức
RegisterXX()
, hãy đăng ký dịch vụ trong module logic tương ứng (mỗi module chỉ cần viết một lần) - Viết lớp điều khiển, nhận/phân tích các tham số do người dùng nhập vào và gọi các dịch vụ của lớp dịch vụ.
- Đăng ký các tuyến đường và hiển thị các giao diện với thế giới bên ngoài. Ví dụ: dự án này là viết tệp cmd.go.
- Thêm một dòng vào main.go
_ "project-name/internal/logic"
(bạn chỉ cần viết một lần) - Thêm một dòng vào main.go
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
(nếu bạn đang sử dụng mysql; chỉ viết một lần)
0. Tổng quan
DDD là gì? Đây là câu hỏi đầu tiên mà mọi nhà phát triển muốn sử dụng DDD cho dự án của mình gặp phải. Chỉ khi hiểu rõ DDD là gì thì mới có thể bắt tay vào sử dụng được. DDD không phải là một cấu trúc công trình như MVC, cũng không thể đồng nhất trực tiếp với kiến trúc microservices, càng không phải là một mẫu thiết kế.