OOP trong NestJS (Phần 2): Encapsulation & Decorators - Giải Mã Magic
🎯 Mục tiêu: Hiểu Encapsulation và "de-magic" các decorators của NestJS. Tiếp tục phát triển
UserServicetừ Phần 1.
🎯 Mục tiêu: Hiểu Encapsulation và "de-magic" các decorators của NestJS. Tiếp tục phát triển
UserServicetừ Phần 1.
🎯 Mục tiêu: Phân biệt rõ ràng Interface và Abstract Class, áp dụng vào
UserServicevới Repository Pattern.
🎯 Mục tiêu: Hiểu bản chất DI, IoC Container, và hoàn thiện inject
IUserRepositoryvàoUserService.
🎯 Mục tiêu: Hiểu 5 nguyên tắc SOLID và áp dụng vào code NestJS thực tế.
🎯 Mục tiêu: Tổng hợp các Design Patterns trong NestJS và hoàn thiện kiến thức OOP.
GitHub Actions là nền tảng CI/CD (Continuous Integration/Continuous Delivery) được tích hợp trực tiếp vào GitHub, cho phép bạn tự động hóa toàn bộ quy trình phát triển phần mềm từ build, test đến deploy. Bài viết này sẽ giúp bạn hiểu rõ về GitHub Actions từ khái niệm cơ bản đến các best practices.
Trong Power BI, Pivot và Unpivot là hai kỹ thuật cơ bản và hữu ích để xử lý, biến đổi dữ liệu nhằm chuẩn bị cho mô hình hóa và phân tích. Dữ liệu dạng Pivot thường trực quan nhưng gây khó khăn cho việc xây dựng một mô hình dữ liệu hiệu quả. Dạng Unpivot (chuẩn hóa) lại dễ dàng hơn để thực hiện các phân tích phức tạp và tương thích tốt với các yêu cầu về Data Modeling.
Dưới đây là phân tích và hướng dẫn chi tiết, áp dụng các ví dụ đã nêu.
Pivot trong Power BI là quá trình tổ chức dữ liệu bằng cách biến các giá trị từ một cột thành các cột riêng biệt. Dữ liệu dạng Pivot giúp trực quan hóa dữ liệu tốt và thường được sử dụng trong các báo cáo, bảng tổng hợp hoặc Excel như đã trình bày trong ví dụ.
Dữ liệu ban đầu dạng Pivot khi tải lên Power BI:
| Ngày | Bikes | Components | Clothing |
|---|---|---|---|
| 07/01/2022 | 10 | 14 | 35 |
| 07/02/2022 | 12 | 15 | 40 |
Bikes, Components, Clothing) được tổ chức thành cột riêng biệt. Doanh số của từng sản phẩm nằm trong các cột, rất dễ nhìn khi đọc trực tiếp trong bảng này.Accessories), bạn cần thêm một cột mới, làm phức tạp bảng dữ liệu và khó mở rộng mô hình.Unpivot là kỹ thuật ngược lại Pivot. Unpivot chuyển các cột thành dòng, giảm số lượng cột xuống chỉ còn các thành phần chính như Ngày, Tên sản phẩm, và Doanh số. Đây là cách tổ chức dữ liệu chuẩn hóa, rất hữu ích trong Power BI để xây dựng mô hình dữ liệu linh hoạt.
Dữ liệu sau khi Unpivot:
| Ngày | Sản phẩm | Doanh số |
|---|---|---|
| 07/01/2022 | Bikes | 10 |
| 07/01/2022 | Components | 14 |
| 07/01/2022 | Clothing | 35 |
| 07/02/2022 | Bikes | 12 |
| 07/02/2022 | Components | 15 |
| 07/02/2022 | Clothing | 40 |
Bikes, Components, Clothing) thành một cột duy nhất (cột Sản phẩm), giúp dễ dàng thực hiện mô hình hóa dữ liệu trong Power BI.SUM(Doanh số)) hoặc nhóm doanh thu theo sản phẩm (GROUP BY Sản phẩm) cực kỳ đơn giản bằng DAX.Power BI tích hợp Power Query, công cụ mạnh mẽ để xử lý hình dạng dữ liệu. Trong Power Query, bạn có thể áp dụng chức năng Pivot hoặc Unpivot chỉ với vài bước.
Bikes, Components, Clothing) trong bảng Pivot.Attribute: Hiển thị tên sản phẩm (Bikes, Components, Clothing).Value: Hiển thị doanh số tương ứng (10, 14, 35,...).| Ngày | Attribute | Value |
|---|---|---|
| 07/01/2022 | Bikes | 10 |
| 07/01/2022 | Components | 14 |
| 07/01/2022 | Clothing | 35 |
Attribute thành Sản phẩm và Value thành Doanh số, phù hợp với mục tiêu phân tích.Ngược lại, nếu bạn cần chuy ển dữ liệu Unpivot trở lại dạng Pivot, bạn có thể thực hiện các bước sau:
Ngày.Sản phẩm làm nhãn cho các cột mới.Doanh số.| Ngày | Bikes | Components | Clothing |
|---|---|---|---|
| 07/01/2022 | 10 | 14 | 35 |
| 07/02/2022 | 12 | 15 | 40 |
SUM, COUNT, CALCULATE.Khi làm việc với Power BI, nếu đặt mục tiêu phân tích dữ liệu hoặc xây dựng mô hình, hãy luôn chuyển dữ liệu về dạng Unpivot để đảm bảo xử lý thuận tiện và hiệu qu ả hơn.
Normalization (Chuẩn hóa dữ liệu) là quá trình tổ chức các bảng và cột trong cơ sở dữ liệu quan h ệ (Relational Database) nhằm giảm thiểu dữ liệu dư thừa và giữ vững tính toàn vẹn của dữ liệu. Chuẩn hóa thường được sử dụng để:
Ý tưởng chính (💡):
Thông tin sản phẩm lưu các thông tin về sản phẩm.Giao dịch bán hàng lưu các thông tin liên quan đến giao dịch.Thông tin khách hàng chứa thuộc tính khách hàng.Chi tiết cửa hàng lưu thông tin cửa hàng.Dữ liệu ban đầu (chưa chuẩn hóa) được hiển thị như sau:
| date | product_id | quantity | product_brand | product_name | product_sku | product_weight |
|---|---|---|---|---|---|---|
| 1/1/1997 | 869 | 5 | Nationeel | Nationeel Grape Fruit Roll | 52382131779 | 17 |
| 1/7/1997 | 869 | 2 | Nationeel | Nationeel Grape Fruit Roll | 52382131779 | 17 |
| 1/3/1997 | 1 | 4 | Washington | Washington Berry Juice | 90748583674 | 8.39 |
| 1/5/1997 | 1472 | 3 | Fort West | Fort West Cookies | 37276054024 | 8.28 |
product_brand, product_name, product_sku, và product_weight bị lặp đi lặp lại cho mỗi giao dịch. Ví dụ:
Nationeel Grape Fruit Roll xuất hiện hai lần cho hai ngày khác nhau (1/1/1997 và 1/7/1997).product_weight đổi từ 17 thành 15), ta phải tìm và cập nhật cho tất cả hàng liên quan đến sản phẩm này, dẫn đến rủi ro sai sót.Các thông tin được chuẩn hóa thành nhiều bảng như sau:
| product_id | product_brand | product_name | product_sku | product_weight |
|---|---|---|---|---|
| 869 | Nationeel | Nationeel Grape Fruit Roll | 52382131779 | 17 |
| 1 | Washington | Washington Berry Juice | 90748583674 | 8.39 |
| 1472 | Fort West | Fort West Cookies | 37276054024 | 8.28 |
| date | product_id | quantity |
|---|---|---|
| 1/1/1997 | 869 | 5 |
| 1/7/1997 | 869 | 2 |
| 1/3/1997 | 1 | 4 |
| 1/5/1997 | 1472 | 3 |
product_weight), ta chỉ cần sửa một dòng trong bảng sản phẩm. Điều này giảm thiểu khả năng sai sót khi phải sửa nhiều dòng.store details) chỉ yêu cầu thêm một bảng mới, không cần thay đổi cấu trúc bảng hiện tại.Một bảng đạt chuẩn 1NF khi mỗi ô dữ liệu trong bảng chỉ chứa một giá trị duy nhất, và các giá trị trong cột đều có cùng loại dữ liệu.
Bảng chưa đạt chuẩn 1NF:
| ID | Tên khách hàng | Số điện thoại |
|---|---|---|
| 1 | Minh | 0123456789, 0987654321 |
| 2 | Hà | 0123456789 |
Số điện thoại của khách hàng Minh chứa 2 số).| ID | Tên khách hàng | Số điện thoại |
|---|---|---|
| 1 | Minh | 0123456789 |
| 1 | Minh | 0987654321 |
| 2 | Hà | 0123456789 |
Một bảng đạt chuẩn 2NF nếu:
Bảng chưa đạt chuẩn 2NF:
| Mã đơn hàng | ID khách hàng | Tên khách hàng | Địa chỉ | Tổng tiền |
|---|---|---|---|---|
| 101 | 1 | Minh | Hà Nội | 500,000 |
| 102 | 2 | Hà | TP.HCM | 700,000 |
Tên khách hàng và Địa chỉ phụ thuộc vào ID khách hàng, không phải Mã đơn hàng. Đây là phụ thuộc từng phần, làm dữ liệu dư thừa.Minh thay đổi địa chỉ, ta phải chỉnh sửa nhiều dòng có liên quan.Tách bảng thành 2 bảng:
| ID khách hàng | Tên khách hàng | Địa chỉ |
|---|---|---|
| 1 | Minh | Hà Nội |
| 2 | Hà | TP.HCM |
| Mã đơn hàng | ID khách hàng | Tổng tiền |
|---|---|---|
| 101 | 1 | 500,000 |
| 102 | 2 | 700,000 |
Tên khách hàng và Địa chỉ.Một bảng đạt chuẩn 3NF nếu:
Bảng chưa đạt chuẩn 3NF:
| ID Nhân viên | Tên nhân viên | Mã phòng ban | Tên phòng ban |
|---|---|---|---|
| 1 | Hoàng | A01 | Kế toán |
| 2 | Lan | A02 | Nhân sự |
Tên phòng ban phụ thuộc vào Mã phòng ban, không phải ID Nhân viên (khóa chính). Đây là phụ thuộc gián tiếp, dẫn đến dư thừa dữ liệu.Kế toán đổi tên, phải sửa nhiều dòng tương ứng.Tách bảng thành 2 bảng:
| ID Nhân viên | Tên nhân viên | Mã phòng ban |
|---|---|---|
| 1 | Hoàng | A01 |
| 2 | Lan | A02 |
| Mã phòng ban | Tên phòng ban |
|---|---|
| A01 | Kế toán |
| A02 | Nhân sự |
Phòng ban.Các cấp độ từ 1NF đến 3NF thường là mức chuẩn hóa được sử dụng phổ biến nhất trong thực tế. Hy vọng giải thích trên cung cấp cái nhìn rõ ràng và dễ hiểu về chuẩn hóa cơ sở dữ liệu! 😊
OLTP là hệ thống xử lý giao dịch trực tuyến, tập trung vào việc lưu trữ và thực hiện các giao dịch nhanh chóng, nhất quán. Đây là các hệ thống hệ điều hành/máy chủ cơ sở dữ liệu hỗ trợ công việc hàng ngày.
OLAP là hệ thống hỗ trợ phân tích dữ liệu nhanh chóng và hiệu quả, đặc biệt dành cho báo cáo, đưa ra quyết định dựa trên dữ liệu lịch sử. Đây là nền tảng của hệ thống Business Intelligence.
| Tiêu chí | OLTP (Quản lý giao dịch) | OLAP (Phân tích dữ liệu) |
|---|---|---|
| Mục tiêu | Quản lý giao dịch, đảm bảo toàn vẹn dữ liệu và xử lý real-time. | Phân tích dữ liệu tổng quan, trực quan hóa đa chiều để ra quyết định. |
| Cấu trúc dữ liệu | Chuẩn hóa (Normalization) để giảm dư thừa dữ liệu. | Phi chuẩn hóa (Denormalization) để tăng tốc độ truy vấn phân tích. |
| Loại dữ liệu | Chi tiết, nhỏ gọn, thể hiện từng giao dịch cụ thể (granular). | Tóm tắt và dữ liệu tích lũy từ nhiều nguồn (summary + aggregates). |
| Mối quan hệ bảng | Nhiều bảng, mối quan hệ rõ ràng, thường là One-to-Many. | Ít bảng hơn, chủ yếu là schema chuyên biệt (star schema, snowflake schema). |
| Hiệu suất truy vấn | Tối ưu hóa cho thao tác CRUD (Create, Read, Update, Delete). | Tối ưu hóa cho báo cáo và phân tích (với các truy vấn phức tạp). |
| Ví dụ cụ thể | Hệ thống quản lý đơn hàng, quản lý sản phẩm. | Dữ liệu báo cáo doanh thu theo thời gian, xu hướng bán hàng theo danh mục. |
Data Modeling trong dự án quản lý giao dịch chủ yếu dựa trên chuẩn hóa dữ liệu để:
Sales: Lưu đơn hàng (Sale_ID, Sale_Date).Customers: Lưu thông tin khách hàng.Products: Lưu danh mục sản phẩm.Sale_Product: Lưu chi tiết sản phẩm trong mỗi giao dịch.Normalization) giúp tăng hiệu suất lưu trữ và xử lý CRUD.Data Modeling trong dự án phân tích tập trung vào việc phi chuẩn hóa dữ liệu và schema đa chiều để:
Sales_Fact: Lưu các giá trị tổng hợp (Sale_ID, Product_ID, Revenue, Total Quantity, Sale_Date).Customers_Dimension: Giải thích về thông tin khách hàng.Products_Dimension: Giải thích về danh mục sản phẩm.Time_Dimension: Giải thích về thời gian.Denormalization) giúp tối ưu cho báo cáo và phân tích.| Loại dự án | OLTP | OLAP |
|---|---|---|
| Mục tiêu | Quản lý giao dịch, lưu trữ và xử lý dữ liệu chi tiết. | Phân tích dữ liệu, báo cáo và trực quan hóa. |
| Mô hình hóa dữ liệu | Chuẩn hóa (Normalization). | Phi chuẩn hóa (Denormalization), Star Schema hoặc Snowflake Schema. |
| Loại dữ liệu | Chi tiết, động. | Tổng quan, lịch sử, tích hợp từ nhiều nguồn. |
| Truy vấn | CRUD (Thêm, Sửa, Xóa, Xem dữ liệu cơ bản). | Aggregate (Tóm tắt, Gom nhóm, Phân tích đa chiều). |
| Công cụ phù hợp | SQL, MySQL, PostgreSQL. | Power BI, Tableau, Data Warehouse. |
Hiểu rõ sự khác biệt này sẽ giúp bạn chọn data modeling phù hợp nhất cho từng loại dự án! 😊
Thời kỳ đầu: Giai đoạn khủng hoảng phần mềm → Chất lượng phần mềm kém, không tương xứng với chi phí thực hiện như chưa rất nhiều lỗi và không đúng yêu cầu
Suy ra: Cần có những phương pháp nghiên cứu chuyên sâu về phát triển phần mềm → ra đời thuật ngữ công nghệ phần mềm
Định nghĩa: Công nghệ phần mềm là một lĩnh vực khoa học về phương pháp luận, kỹ thuật và công cụ tích hợp trong phát triển và vận hành phần mềm. Nhằm tạo ra PM với chất lượng mong muốn
is a collection of instructions, data, or computer programs that are used to run machines and carry out particular activities. It is the antithesis of hardware, which refers to a computer’s external components. A device’s running programs, scripts, and applications are collectively referred to as “software” in this context.
| System Software | Application Software |
|---|---|
| It is designed to manage the resources of the computer system, like memory and process management, etc. | It is designed to fulfill the requirements of the user for performing specific tasks. |
| Written in a low-level language. | Written in a high-level language. |
| Less interactive for the users. | More interactive for the users. |
| System software plays vital role for the effective functioning of a system. | Application software is not so important for the functioning of the system, as it is task specific. |
| It is independent of the application software to run. | It needs system software to run. |

Use Case Name: Custom Drone Order
Use Case Description: This use case describes the process of a customer ordering a custom-built drone based on their specific requirements.
Actors:
Pre-conditions:
Post-conditions:
Normal Flow:
Alternative Flows:
Một công cụ phổ biến để biểu diễn yêu cầu của hệ thống và hiểu rõ các tác nhân, chức năng và tương tác của hệ thống là sơ đồ Use Case (Use Case Diagram). Sơ đồ Use Case cung cấp một cái nhìn tổng quan về các chức năng của hệ thống và cách các tác nhân (người dùng, hệ thống khác, v.v.) tương tác với hệ thống.

Sơ đồ Use Case bao gồm các phần tử chính như các Use Case (chức năng), các tác nhân (người dùng, hệ thống khác), và các quan hệ và tương tác giữa chúng. Use Case mô tả các hành vi của hệ thống từ góc nhìn người dùng hoặc tác nhân và giúp xác định các chức năng chính cần phát triển.
Trong quá trình phân tích thiết kế hệ thống, sơ đồ Use Case thường được kết hợp với các tài liệu khác như biểu đồ tuần tự (sequence diagram), biểu đồ lớp (class diagram) và biểu đồ hoạt động (activity diagram) để mô tả và phân tích chi tiết hơn về các tương tác và cấu trúc của hệ thống.
Nội dung bài học
<<include>>" và "<<extend>>".Use-case diagram
Chỉ mô tả chủ yếu các thông tin liên quan đến việc thực hiện các nghiệp vụ trong thế giới thực, chưa thể hiện rõ nét việc thực hiện các nghiệp vụ trên máy tính.
Mô tả thông quá các văn bản dễ gây ra nhầm lẫn và không trực quan.
Actor

Usecase
Relationship

Quan hệ bao gồm (<<include>>)

Quan hệ mở rộng (<<extend>>)

Sơ đồ use-case đầy đủ

Đặc tả use-case
Đặc tả Use Case là một tài liệu mô tả chi tiết hành vi của hệ thống từ góc nhìn của người dùng. Nó bao gồm các trường hợp sử dụng (Use Case) chính của hệ thống, các bước thực hiện, các ràng buộc và điều kiện tiên quyết cho mỗi trường hợp sử dụng.
Cấu trúc của một đặc tả Use Case:


Activity Diagram là một mô hình logic dùng để mô hình hoá các hoạt động trong một quy trình nghiệp vụ. Hay có thể hiểu. Activity Diagram là sơ đồ luồng xử lý của hệ thống. Bao gồm luồng đi của dòng dữ liệu, dòng sự kiện.
Activity Diagram dùng để mô tả các hoạt động trong một chức năng của hệ thống (mô tả luồng xử lý của một Use – Case)

Start

Activity
Nên đặt tên là động từ. Và mô tả đủ ý nghĩa tổng thể của hoạt động nhất có thể.

Transition
Từ hoạt động này tới hoạt động khác cần có Transition biểu thị đường đi. Lưu ý Transition có mũi tên biểu thị chiều của luồng xử lý.

Condition
Có thể hiểu đây là ký hiệu biểu thị nút điều kiện chuyển hướng. Tùy theo trường hợp đúng hay sai của kết quả biểu thức logic bên trong ký hiệu mà có hướng di chuyển tiếp theo tương ứng.

Synchronization bar
Có thể hiểu đơn giản. Có các trường hợp cần hội tụ đủ nhiều luông điều khiển một lúc để gộp thành một luồng xử lý thì cần dùng Join.
Và đôi khi cần phải tách một luồng điều khiển ra hai hoặc nhiều luồng khác biệt nhau thì cần Fork. Và mỗi luồng của Fork hoàn toàn không lệ thuộc nhau

End

Ánh xạ từ sơ đồ Use-case qua Activities diagrams

Bài tập buổi 5:
ER-Diagram (Entity-Relationship Diagram) là một công cụ được sử dụng trong thiết kế cơ sở dữ liệu để biểu diễn các mối quan hệ giữa các thực thể (entities). Nó được giới thiệu bởi Peter Chen vào năm 1976 và trở thành một phương pháp phổ biến để mô hình hóa dữ liệu.
ER-Diagram sử dụng các khái niệm cơ bản như thực thể (entity), mối quan hệ (relationship) và thuộc tính (attribute) để biểu diễn cấu trúc dữ liệu. Thực thể là các đối tượng trong thế giới thực, chẳng hạn như người, đồ vật hoặc sự kiện. Mối quan hệ biểu thị các mối liên kết giữa các thực thể, trong đó có thể có mối quan hệ một một (one-to-one), một nhiều (one-to-many) hoặc nhiều nhiều (many-to-many). Thuộc tính là các đặc điểm của thực thể, ví dụ như tên, tuổi, địa chỉ.
Năm 1988, ANSI (American National Standards Institute) công nhận ER-Diagram là mô hình chuẩn trong thiết kế cơ sở dữ liệu. Việc công nhận này đã tạo ra một sự nhất quán trong việc sử dụng ER-Diagram và giúp nó trở thành một công cụ phổ biến trong lĩnh vực này.








Thuộc tính



Yêu cầu: hoàn thành bảng bên dưới bằng cách bổ sung mối quan hệ, thuộc tính và bảng số



Bài tập số 1:
| Mô hình | Đặc điểm | Ưu điểm | Nhược điểm | Trường hợp áp dụng |
|---|---|---|---|---|
| Thác nước | ||||
| Chế thử | ||||
| Gia tăng | ||||
| Xoắn ốc | ||||
| RAD |
A context diagram is a data flow diagram chỉ hiển thị cấp độ cao nhất, còn được gọi là Cấp độ 0. Ở cấp độ này, chỉ có một nút xử lý hiển thị đại diện cho các chức năng của một hệ thống hoàn chỉnh liên quan đến cách nó tương tác với các thực thể bên ngoài. Một số lợi ích của Biểu đồ Ngữ cảnh bao gồm:
A context Data Flow Diagram được vẽ cho một "Hệ thống đặt đồ ăn online". Thể hiện bên tham gia sẽ tương tác với hệ thống, được gọi là các thực thể bên ngoài. Trong ví dụ này, Nhà cung cấp, Nhà bếp, Quản lý và Khách hàng là các thực thể sẽ tương tác với hệ thống. Giữa quy trình và các thực thể bên ngoài, có luồng dữ liệu (các kết nối) chỉ ra sự tồn tại của việc trao đổi thông tin giữa các thực thể và hệ thống.

Context DFD là đầu vào của mô hình dữ liệu, nó chỉ thể hiện quy trình, không chưa bất kỳ dữ liệu nào

Data flow diagram Cấp độ 1, đó là sự phân rã (tức là phân chia) của quy trình "Hệ thống đặt đồ ăn online" được hiển thị trong Context diagram.
Lấy ví dụ "Hệ thống đặt đồ ăn online" chứa ba quy trình, bốn thực thể bên ngoài và hai kho dữ liệu.
Các quy trình
Khách hàng có thể đặt một Đơn hàng. Quy trình Đặt món nhận Đơn hàng, chuyển tiếp nó đến Nhà bếp, lưu trữ nó trong kho dữ liệu Đơn hàng, và lưu trữ thông tin cập nhật về Chi tiết hàng tồn trong kho dữ liệu Hàng tồn. Quy trình cũng gửi một Hóa đơn đến Khách hàng.
Quản lý có thể nhận Báo cáo thông qua quy trình Tạo báo cáo, quy trình này nhận Chi tiết hàng tồn và Đơn hàng như đầu vào từ kho dữ liệu Hàng tồn và Đơn hàng tương ứng.
Quản lý cũng có thể khởi tạo quy trình Đặt hàng hàng tồn bằng cách cung cấp Đơn hàng hàng tồn. Quy trình chuyển tiếp Đơn hàng hàng tồn đến Nhà cung cấp và lưu trữ thông tin cập nhật về Chi tiết hàng tồn trong kho dữ liệu Hàng tồn.
Phân tích chi tiết các yêu cầu chức năng và phi chức năng - dựa vào yêu cầu bài toán:
Lập mô hình Use Case:
Lập sơ đồ activities diagram
Thiết kế giao diện người dùng (UI):
Lựa chọn công nghệ: