Giới thiệu về OfX .NET
Trong quá trình phát triển hệ thống Microservices, việc map dữ liệu trở thành một thách thức không nhỏ cho lập trình viên. Với những dự án nhỏ, công việc này có thể khá đơn giản, nhưng khi quy mô dự án lớn và dữ liệu phức tạp hơn, việc mapping data thường trở nên mệt mỏi và tốn nhiều thời gian.
Để giải quyết vấn đề này, hôm nay tôi xin giới thiệu đến bạn một thư viện .NET mang tên OfX, giúp việc mapping dữ liệu trở nên dễ dàng và thú vị hơn. Hãy cùng tìm hiểu cách thức hoạt động của OfX thông qua một ví dụ cụ thể.
Bối Cảnh Dự Án
Giả sử chúng ta có một lớp MemberResponse
như sau:
csharp
public class MemberResponse
{
public string Id { get; set; }
public string UserId { get; set; }
public string UserName { get; set; }
public string UserEmail { get; set; }
public string UserProvinceId { get; set; }
public string ProvinceName { get; set; }
public string CountryName { get; set; }
}
Dữ liệu trong MemberResponse
được lấy từ các service khác nhau: Member
, Identity
, và MasterData
. Trước đây, chúng ta phải làm các bước sau:
- Lấy danh sách
MemberResponse
từ serviceMember
. - Từ đó, collect danh sách
UserIds
để gọi đến serviceIdentity
và lấyUserName
,UserEmail
,UserProvinceId
. - Tiếp theo, từ danh sách
UserProvinceIds
, gọi đến serviceMasterData
để lấy thông tinProvinceName
vàCountryName
.
Như vậy, quy trình này có thể khá phức tạp và tốn thời gian. Chính vì lý do đó, tôi đã phát triển thư viện OfX để giải quyết vấn đề phân tán này.
Cách Thức Hoạt Động Của OfX
Thư viện OfX sử dụng một số thuộc tính tùy chỉnh để đánh dấu các trường cần được mapping. Dưới đây là một ví dụ về cấu trúc có sử dụng ofX:
csharp
public class MemberResponse
{
public string Id { get; set; }
public string UserId { get; set; }
[UserOf(nameof(UserId))]
public string UserName { get; set; }
[UserOf(nameof(UserId), Expression = 'Email')]
public string UserEmail { get; set; }
[UserOf(nameof(UserId), Expression = 'ProvinceId')]
public string UserProvinceId { get; set; }
[ProvinceOf(nameof(UserProvinceId), Order = 1)]
public string ProvinceName { get; set; }
[ProvinceOf(nameof(UserProvinceId), Expression = 'Country.Name', Order = 1)]
public string CountryName { get; set; }
}
OfX sẽ tự động xử lý quá trình lấy dữ liệu và mapping properties dựa trên các thuộc tính được đánh dấu. Ví dụ, thuộc tính Order
cho phép bạn xác định thứ tự mà các fields sẽ được mapping, đảm bảo rằng dữ liệu cần thiết được lấy trước khi các dữ liệu liên quan được truy cập.
Cách Cấu Hình OfX
Cấu hình OfX khá đơn giản:
- Cài đặt OfX Core cùng với các extensions phù hợp với framework mà bạn đang sử dụng.
- Dưới đây là cấu hình cơ bản của OfX cùng với EntityFrameWorkCore và Nats:
csharp
builder.Services.AddOfX(cfg =>
{
cfg.AddAttributesContainNamespaces(typeof(WhereTheAttributeDefined).Assembly);
cfg.AddNats(config => config.Url("nats://localhost:4222"));
})
.AddOfXEFCore(options =>
{
options.AddDbContexts(typeof(TestDbContext));
options.AddModelConfigurationsFromNamespaceContaining<SomeModelAssemblyMarker>();
});
Kết Luận
Với việc sử dụng OfX, bạn có thể giảm thiểu thời gian và công sức trong việc mapping dữ liệu phân tán trong hệ thống Microservices. Để tìm hiểu thêm chi tiết và trải nghiệm thực tế, bạn có thể tham khảo repository: OfX và link demo tại đây: Demo.
Hãy cùng trải nghiệm thư viện OfX và làm cho việc phát triển hệ thống Microservices của bạn trở nên nhẹ nhàng hơn nhé!