50 lines
2.6 KiB
Markdown
50 lines
2.6 KiB
Markdown
---
|
|
name: GenerateArchitectureTest
|
|
description: Hướng dẫn tạo Architecture Test sử dụng NetArchTest.Rules để bảo vệ kiến trúc Clean Architecture.
|
|
---
|
|
|
|
# GenerateArchitectureTest Skill
|
|
|
|
Khi user yêu cầu kiểm tra hoặc khởi tạo **Architecture Test**, bạn cần sử dụng thư viện `NetArchTest.Rules` để sinh luận kiểm điểm nhằm bảo vệ chặt chẽ cấu trúc "Clean Architecture" của dự án.
|
|
|
|
## Mục đích
|
|
- Ngăn chặn Dev code ẩu, import sai library/module giữa các tầng (layer).
|
|
- Nếu vi phạm (VD: import Entity Framework vào tầng Domain), bài test này sẽ báo ĐỎ ngay lập tức lúc build code. Bằng chứng thép giúp kiến trúc được bảo vệ tuyệt đối!
|
|
|
|
## Hướng dẫn viết Test Rules
|
|
|
|
Bạn cần viết các test method (dùng `[Fact]` với xUnit hoặc NUnit) sử dụng Fluent API của `NetArchTest.Rules`. Dưới đây là các luật phổ biến bắt buộc:
|
|
|
|
1. **Domain Layer Rules (Luật tầng Domain):**
|
|
- Domain không được phụ thuộc vào bất cứ thứ gì từ Infrastructure, Application hay WebAPI.
|
|
```csharp
|
|
[Fact]
|
|
public void DomainLayer_ShouldNot_HaveDependencyOn_OtherLayers()
|
|
{
|
|
var result = Types.InAssembly(DomainAssembly)
|
|
.ShouldNot()
|
|
.HaveDependencyOnAny(
|
|
"MyNewProjectName.Application",
|
|
"MyNewProjectName.Infrastructure",
|
|
"MyNewProjectName.WebAPI"
|
|
)
|
|
.GetResult();
|
|
|
|
Assert.True(result.IsSuccessful);
|
|
}
|
|
```
|
|
|
|
2. **Application Layer Rules (Luật tầng Application):**
|
|
- Application Layer chỉ được phép giao tiếp với Domain, KHÔNG ĐƯỢC có dependency vào `Infrastructure` hoặc `WebAPI`.
|
|
|
|
3. **Controller Rules (Luật đặt tên/vị trí API):**
|
|
- Controller bắt buộc phải kế thừa class BaseAPIController, và có hậu tố là "Controller".
|
|
- Không được phép truy vấn Database trực tiếp từ Controller (ngăn không cho Inject `DbContext` hay `IRepository` vào Controller, kiểm duyệt dependencies của Constructor).
|
|
|
|
4. **Handler Rules (CQRS):**
|
|
- Các Handler xử lý logic phải implements interface `IRequestHandler` và kết thúc bằng `CommandHandler` hoặc `QueryHandler`. Nó chỉ nằm ở Application Layer.
|
|
|
|
## Định dạng file đầu ra
|
|
- **Đường dẫn:** Chứa trong test project như `tests/MyNewProjectName.ArchitectureTests/`.
|
|
- **Tên file:** Thường đặt tên theo phạm vi test như `LayerTests.cs`, `DesignConventionTests.cs`, `NamingRulesTests.cs`, v.v.
|