如何将许可代码分成层?一个用于验证,另一个用于许可证创建



我正在为我的内部项目开发许可架构。(没有空间支付金雅拓的额外费用(。我的许可证经理将有两个职责,

  1. 从文件中读取并验证许可证(将在 我创建的应用程序(
  2. 使用提供的信息生成许可证文件(将作为内部工具留在我身边(

现在,第 1 部分和第 2 部分将依赖于相同的加密-解密和序列化-反序列化逻辑。

public interface ILicenseManager
{
License ValidateAndGetLicense();
void CreateLicense(License license);
}

我需要在这里构建我的许可证管理器类,以便只有第 1 部分(即解密和读取(所需的代码才能交付给客户。另一部分永远留在我身边。

此处的目的不是重复代码。依赖于相同的逻辑。 是否有任何标准方法或任何设计主体来处理这种情况。

我考虑过使用 ISP(接口隔离主体(和代理模式。 但是,两者都需要整个组件才能发货。另一种选择是分离逻辑并将它们编写在单独的程序集中。

我不会担心代码,即"加密"被运送到客户端,这并不重要。重要的部分是保留用于生成有效许可证的私钥,并将公钥与应用程序一起交付。

因此,如果您想要将加密与解密分开的原因是"安全性",我认为您保持私钥机密性足以涵盖这一点。

话虽如此,从面向对象的角度来看,我会以不同的方式对问题进行建模。问题的核心是License,它需要在给定的时刻验证自身,因此:

public interface License {
boolean validNow(); // Or whatever you need
}

然后只需创建一个从文件中读取的实现:

public final class FileLicense {
...
}

因此,此时,您可以从文件中读取和验证许可证。

好的,那么如何"创建"License.简单的方法(根据您的要求可能适合也可能不适合(是创建另一个实现,如下所示:

public final class NewLicense {
...
public NewLicense(PrivateKey companyKey, license data...) {
...
}
}

在此设计中,您基本上总是实现一个接口,并且仍然可以分离许可证的创建和使用。如果您现在只需要基于文件的许可证(KISS,YAGNI(,您还可以将存储/加载从文件功能直接放入License类中。

相关内容

  • 没有找到相关文章

最新更新