Đây là bài đầu tiên trong loạt bài: Thêm cờ tính năng vào ứng dụng ASP.NET Core.
Trong chương trình .NET Community Standup, một thư viện mới đã được giới thiệu đang được xây dựng bởi nhóm Azure - Microsoft.FeatureManagement.
Trong bài viết này, tôi giới thiệu ngắn gọn về thư viện và cách sử dụng nó trong ứng dụng ASP.NET Core.
Bài viết này chỉ trình bày những điều cơ bản - trong các bài viết sau, tôi sẽ trình bày một số tính năng cụ thể của ASP.NET Core, cũng như cách tạo các bộ lọc tính năng tùy chỉnh.
Mặc dù được phát triển bởi nhóm Azure, Microsoft.FeatureManagement không có bất kỳ mối quan hệ trực tiếp nào với chính Azure. Thay vào đó, đó là một thư viện .NET Standard 2.0 mà bạn có thể tìm thấy trên NuGet. Ngoài ra còn có một gói Microsoft.FeatureManagement.AspNetCore bổ sung hỗ trợ TagHelper nếu bạn cần.
Microsoft.FeatureManagement được xây dựng dựa trên hệ thống cấu hình Microsoft.Extensions.Configuration được sử dụng trong ASP.NET Core (nhưng cũng có thể được sử dụng trong bất kỳ ứng dụng .NET Standard nào).
Nó cung cấp một cách tập trung nhưng có thể mở rộng để thêm các cờ tính năng vào hệ thống của bạn. Điều này cho phép bạn triển khai các tính năng mới cho một nhóm nhỏ người dùng, giới hạn tính khả dụng của một tính năng theo thời gian hoặc thực hiện các thử nghiệm A / B chẳng hạn.
Vì Microsoft.FeatureManagement được xây dựng trên hệ thống cấu hình nên nó có thể được kiểm soát bởi bất kỳ nhà cung cấp cấu hình nào có sẵn. Điều đó có nghĩa là bạn có thể kiểm soát các tính năng từ tệp appsettings.json, từ các biến môi trường, từ cơ sở dữ liệu hoặc từ bất kỳ nhà cung cấp nào khác. Việc bật và tắt các tính năng chỉ cần thay đổi các giá trị trong một trong các nhà cung cấp cấu hình của bạn.
Nếu bạn đang xây dựng một ứng dụng ở bất kỳ kích thước nào, rất có thể bạn đã sử dụng cờ tính năng và bạn cũng có thể đang sử dụng hệ thống cấu hình để kiểm soát nó. Microsoft.FeatureManagement hầu hết chỉ chính thức hóa cách tiếp cận này, vì vậy nếu bạn chưa sử dụng phiên bản của riêng mình, bạn nên xem qua.
Tôi sẽ bắt đầu trình diễn gói Microsoft.FeatureManagement bằng cách thêm một cờ tính năng đơn giản vào ứng dụng ASP.NET Core để kiểm soát thông báo chào mừng nào chúng tôi hiển thị trên trang chủ.
Khi cờ tắt, chúng ta sẽ hiển thị "Welcome"; khi cờ được bật, chúng tôi sẽ hiển thị "Welcome to the Beta":
Trong ví dụ này, tôi đang sử dụng Ứng dụng Web ASP.NET Core (Razor Page) với Individual Authentication, nhưng bạn có thể sử dụng bất kỳ ứng dụng .NET Standard nào sử dụng hệ thống Microsoft.Extensions.Configuration.
Trước tiên, bạn cần cài đặt gói Microsoft.FeatureManagement sử dụng dotnet
CLI:
dotnet add package Microsoft.FeatureManagement
Sau khi thêm nó, tệp .csproj của bạn sẽ trông giống như sau:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.FeatureManagement" Version="2.4.0" />
</ItemGroup>
</Project>
Bây giờ bạn có thể thêm các dịch vụ cần thiết vào DI container của mình:
using Microsoft.FeatureManagement;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddFeatureManagement();
}
}
Đó là tất cả các cơ sở hạ tầng, vì vậy đã đến lúc thực sự thêm các cờ vào ứng dụng của bạn.
Để thư viện FeatureManagement "khám phá" các tính năng của bạn, bạn nên tạo phần "FeatureManagement" trong cấu hình ứng dụng của mình. Mỗi khóa phụ của phần là một cờ tính năng riêng biệt.
Ví dụ: trong tệp appsettings.json sau đây, chúng tôi đã tạo một cờ tính năng là NewWelcomeBanner
và đặt giá trị của nó thành false
.
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"FeatureManagement": {
"NewWelcomeBanner": false
}
}
Hãy nhớ rằng, tất cả điều này được điều khiển bởi các nhà cung cấp cấu hình ASP.NET tiêu chuẩn, vì vậy một cách khác để cấu hình cờ sẽ là tạo một biến môi trườngFeatureManagement__NewWelcomeBanner
và đặt giá trị của nó thành"false"
.
Giờ đây, bạn đã có cờ tính năng (hiện đã bị vô hiệu hóa) cho ứng dụng của mình, nhưng chúng ta chưa sử dụng nó ở bất kỳ đâu. Mở mã cho trang chủ của ứng dụng của bạn, Index.cshtml.cs và đưa IFeatureManager
vào trang của bạn:
using Microsoft.FeatureManagement;
public class IndexModel : PageModel
{
private readonly IFeatureManager _featureManager;
public IndexModel(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
// ...
}
Service IFeatureManager
cho phép bạn truy vấn hệ thống quản lý tính năng để xác định xem cờ tính năng có được bật hay không. IFeatureManager
có một phương thức duy nhất, để kiểm tra xem cờ tính năng có được bật hay không:
public interface IFeatureManager
{
bool IsEnabled(string feature);
}
Bạn cần lưu ý rằng tham số feature
là một giá trị chuỗi, giá trị này phải khớp với giá trị bạn đã sử dụng trong cấu hình "NewWelcomeBanner"
của bạn. Bạn có thể thêm thuộc tính vào PageModel
và đặt thuộc tính có điều kiện dựa trên giá trị của cờ tính năng:
public class IndexModel : PageModel
{
private readonly IFeatureManager _featureManager;
public IndexModel(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
public string WelcomeMessage { get; set; }
public void OnGet()
{
WelcomeMessage = _featureManager.IsEnabled("NewWelcomeBanner")
? "Welcome to the Beta"
: "Welcome";
}
}
Khi bạn chạy ứng dụng của mình, cờ tính năng bị tắt (vì chúng ta đã tắt nó trong cấu hình), vì vậy bạn sẽ thấy dòng tiêu đề "Welcome" tiêu chuẩn:
Tuy nhiên, nếu bạn chỉnh sửa "NewWelcomeBanner": true
trong tệp appsettings.json của mình và tải lại trang, bạn sẽ thấy rằng cờ tính năng đã được bật và tiêu đề mới sẽ hiển thị.
Nhờ trình cung cấp cấu hình tệp JSON, bạn không phải khởi động lại ứng dụng của mình - nhà cung cấp cấu hình sẽ tự động phát hiện thay đổi và cập nhật cờ tính năng ngay lập tức.
Như đã chỉ ra, thư viện Microsoft.FeatureManagement dựa vào hệ thống cấu hình cơ bản, vì vậy nếu bạn muốn điều chỉnh động cờ tính năng như thế này, bạn sẽ cần sử dụng trình cung cấp cấu hình hỗ trợ cập nhật động các giá trị cấu hình như trình cung cấp file hoặc trình cung cấp Azure Key Vault.
Cờ tính năng được định nghĩa trong mã bằng cách sử dụng chuỗi ma thuật: "NewWelcomeBanner"
trong ví dụ trước. Thay vì phân tán những thứ này xung quanh mã của bạn, tài liệu khuyên bạn nên tạo enum FeatureFlags
và gọi phương thức nameof()
để tham chiếu các giá trị, ví dụ:
// Define your flags in an enum
// Be careful not to refactor/rename any typos, as that will break configuration
public enum FeatureFlags
{
NewWelcomeBanner
}
// Reference the feature flags using nameof()
var isEnabled = _featureManager.IsEnabled(nameof(FeatureFlags.NewWelcomeBanner));
Cá nhân tôi chỉ sử dụng một static class và các hằng số chuỗi, vì nó làm code dễ đọc hơn. Nhưng cả hai cách tiếp cận về cơ bản giống hệt nhau:
// Using a static class separates the "name" of the feature flag
// from its string value
public static class FeatureFlags
{
public const string NewWelcomeBanner = "NewWelcomeBanner";
}
// No need for nameof() at the call site
var isEnabled = _featureManager.IsEnabled(FeatureFlags.NewWelcomeBanner);
Các tính năng được trình bày trong bài viết này (tải từ cấu hình, IFeatureManager
) đều là một phần của thư viện Microsoft.FeatureManagement cốt lõi , vì vậy bạn có thể sử dụng chúng trong bất kỳ ứng dụng .NET Standard 2.0 nào.
Trong bài viết tiếp theo, tôi sẽ giới thiệu thư viện Microsoft.FeatureManagement.AspNetCore cung cấp các tính năng dành riêng cho ASP.NET Core như TagHelper và Action Filter giúp làm việc với các tính năng dễ dàng hơn trong ứng dụng ASP.NET Core.
Thư viện Microsoft.FeatureManagement là một thư viện mới đang được nhóm Azure phát triển để chuẩn hóa việc quản lý tính năng trong các ứng dụng ASP.NET Core. Nó dựa vào hệ thống cấu hình để kiểm soát các tính năng nào được bật.
Trong bài viết này, tôi đã hướng dẫn cách tạo các tính năng đơn giản và cách kiểm tra chúng trong ứng dụng của bạn bằng interface IFeatureManager
.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong bài viết này, tôi giới thiệu sơ lược về một số lựa chọn thay thế cho thư viện Microsoft.FeatureManagement và mô tả sự khác biệt của chúng
Trong bài viết này, tôi giới thiệu hai cách để cải thiện tính nhất quán của cờ tính năng cho mọi yêu cầu đối với người dùng trong ứng dụng ASP.NET Core.
Trong bài viết này, tôi sẽ chỉ cho bạn cách tạo bộ lọc tính năng tùy chỉnh của riêng mình bằng cách sử dụng IFeatureFilter trong ASP.NET Core.
Trong bài này, tôi sẽ hướng dẫn cách sử dụng hai bộ lọc PercentageFilter và TimeWindowFilter để tạo cờ tính năng động trong ứng dụng ASP.NET Core.