这个问题在技术上适用于C#项目,但它非常通用,它也可以很容易地应用于Java。
我正在开发一个"插件的早期阶段"用于商业应用的API。我生成了一个DLL(或jar)接口,用户可以使用它来为应用程序构建一个插件。
作为商业应用程序,我不想公开大部分实现或源代码。
我的问题是我无法决定如何处理插件可能需要实例化属于应用程序的类的情况。他们显然需要访问它,但我不想发布源代码(当然,除了您通过界面获得的详细信息之外)。
举个例子,我想让插件创建一个新的Recipe
:
new Recipe(new Bread(), new Flour(2), new Yeast(), ...)
这意味着我不能给他们一个Recipe
和成分接口或抽象类。所以,我有两个选择:
Recipe
我还有其他方法吗?
Recipe
很容易找工厂,因为它是一个单一的班级,但我没有看到一个干净的方式来建立一个工厂来获得"成分"
我能想到的只是使用字符串ID,ENUM或每个项目的接口注册它们,允许用户在没有实际类的情况下引用它们。
接口方法会将配料所需的文件加倍,但最终对用户来说是最干净的。
我想象一个工厂方法,如:
var flour = CreateIngredient<IFlour>();