Trong quá trình phát triển phần mềm, chúng ta thường viết những đoạn code có thể tái sử dụng nhiều lần:
- Các hàm thống kê
- Utility functions
- Helper cho ML pipelines
- Feature engineering
Tuy nhiên nếu các đoạn code này nằm rải rác trong nhiều repository, việc bảo trì sẽ trở nên khó khăn.
Giải pháp tốt nhất là đóng gói chúng thành một thư viện (library) và phát hành dưới dạng NuGet package.
Trong bài viết này, chúng ta sẽ đi qua toàn bộ quy trình:
Idea → Library → GitHub → CI/CD → NuGet
Dựa trên kinh nghiệm thực tế khi xây dựng thư viện QuantEdge.
Vì sao nên tạo NuGet Package?
NuGet là hệ thống quản lý package chính thức của .NET ecosystem.Việc đóng gói code thành NuGet mang lại nhiều lợi ích.
- Code Reusability
- Easy Distribution
- Version Control
NuGet hỗ trợ Semantic Versioning:
1.0.0 → first version
1.0.1 → bug fix
1.1.0 → add feature
2.0.0 → breaking change
Thiết kế kiến trúc project
Trước khi viết code, nên tổ chức repository theo cấu trúc chuẩn.Ví dụ:
QuantEdge
│
├─ src
│ └─ QuantEdge
│ QuantEdge.csproj
│
├─ tests
│ └─ QuantEdge.Tests
│
├─ docs
│
├─ .github
│ └─ workflows
│
├─ QuantEdge.slnx
├─ README.md
└─ LICENSENguyên tắc quan trọng:
- Prefer static classes
- Prefer pure functions
- Avoid unnecessary state
Cấu hình file .csproj
Để package hiển thị chuyên nghiệp trên NuGet, cần thêm metadata vào.csproj.
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<PackageId>YourRepo</PackageId>
<Version>1.0.0</Version>
<Authors>YourName</Authors>
<Description>
Quantitative analytics utilities for .NET developers.
</Description>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>
https://github.com/yourname/your-repo
</RepositoryUrl>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>
Lưu ý: khi bạn muốn publish version mới, bạn vào file csproj, cập nhật lại tag Version
Unit Testing
Với thư viện tính toán, unit test là bắt buộc. Framework phổ biến nhất trong .NET hiện nay là xUnit.netVí dụ
public class CorrelationTests
{
[Fact]
public void PerfectPositiveCorrelation()
{
double[] x = {1,2,3,4};
double[] y = {2,4,6,8};
var corr = Correlation.Pearson(x,y);
Assert.Equal(1, corr, 5);
}
}
Build NuGet Package
Sau khi viết xong thư viện, có thể tạo package bằng:dotnet pack -c Release
Nhận xét
Đăng nhận xét