集成许可证处理的设计选择

Cha*_*ani 4 .net c# design-patterns

对于我们的.Net应用程序,我们已将许可组件集成到应用程序中 在应用程序代码中,我们验证许可证,并在此基础上我们需要启用/禁用某些功能.例如,如果用户具有试用许可证,则他们只能访问应用程序的特定部分,而付费用户可以访问任何部分.我需要帮助决定设计,以便影响最小.我不想在if..else语句中撒上代码.请与我分享一些实现这一目标的最佳方法.

Mar*_*ann 5

与往常一样,答案是用多态替换条件.

将每个功能封装为策略,并将禁用的功能实现为Null对象.然后可以将两者封装在条件复合中,该复合根据许可组件在两者之间进行选择.

例如,假设您在IPrinter界面后面封装了打印功能.您可以在RealPrinter类中实现真正的功能,并在NullPrinter类中实现禁用功能,这两者都实现了IPrinter接口.

许可证检查可以在GuardedPrinter类中实现,它看起来像这样:

public class GuardedPrinter : IPrinter
{
    private readonly IPrinter realPrinter;
    private readonly IPrinter nullPrinter;
    // more fields and initialization omitted for brevety...

    public PrintResult Print()
    {
        if (this.licence.IsEnabled)
        {
            return this.realPrinter.Print();
        }

        return this.nullPrinter.Print();
    }
}
Run Code Online (Sandbox Code Playgroud)