Phần 1 - Giới thiệu thư viện Microsoft.FeatureManagement

Đâ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.

Giới thiệu thư viện Microsoft.FeatureManagement

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.

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.

Cách hoạt động: cờ tính năng đơn giản

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":

Phần 1 - Giới thiệu thư viện Microsoft.FeatureManagement

Cài đặt gói

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êm cờ tính năng đơn giả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ường FeatureManagement__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:

Phần 1 - Giới thiệu thư viện Microsoft.FeatureManagement

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ị.

Phần 1 - Giới thiệu thư viện Microsoft.FeatureManagement
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.

Giảm chuỗi ma thuật

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.

Tóm lược

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.

Series: Thêm cờ tính năng vào ứng dụng ASP.NET Core
Trong loạt bài này, tôi sẽ trình bày cách tạo các cờ tính năng vào ứng dụng ASP.NET Core sử dụng thư viện Microsoft.FeatureManagement.
ASP.NET Core.NET CoreASP.NET Core MVCLập Trình C#
Bài Viết Liên Quan:
Phần 6 - Các lựa chọn thay thế cho Microsoft.FeatureManagement
Trung Nguyen 13/03/2022
Phần 6 - Các lựa chọn thay thế cho Microsoft.FeatureManagement

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

Phần 5 - Đảm bảo cờ tính năng nhất quán trên các yêu cầu
Trung Nguyen 13/03/2022
Phần 5 - Đảm bảo cờ tính năng nhất quán trên các yêu cầu

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.

Phần 4 - Tạo bộ lọc tính năng tùy chỉnh
Trung Nguyen 13/03/2022
Phần 4 - Tạo bộ lọc tính năng tùy chỉnh

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.

Phần 3 - Tạo cờ tính năng động với bộ lọc tính năng
Trung Nguyen 12/03/2022
Phần 3 - Tạo cờ tính năng động với bộ lọc tính năng

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.