第三方实现者的指定接口

问题描述 投票:-1回答:2

我有一个需要某些功能的项目,并且已经为这些功能创建了一个接口。如果该接口的实现将由外部各方执行,那么正确的方法应该是什么?

我的想法是创建一个类库项目(MyInterface),在此项目中定义我的接口(IModule),对其进行编译,并将DLL(MyInterface.dll)交给外部各方。外部各方将使用DLL作为参考来开发/实现,然后给我他们最终的DLL。我的主要项目将引用MyInterface项目以及所有实现。在我的代码中,我将执行以下操作:

IModule module = new ImplementationA();
module.DoSomething();
module = new ImplementationB(); // Change implementation at runtime

此方法正确吗?有更好的选择吗?

侧问:这是策略设计模式吗?还是门面?

c# .net design-patterns
2个回答
0
投票

我可能会使用配置在运行时加载第三方程序集,查找单个工厂类型,创建一个单例实例,并通过工厂创建每个实现类。这样,您可以将所有程序集交给第三方,它们可以随时构建和更新其零部件。它们取决于您的代码,但您不依赖于他们的代码。


0
投票

我对您的项目或情况了解不多,但是我会考虑发布您界面的nuget程序包,并允许第三方安装它。当您需要更改界面时,可以使用版本控制功能。您将更改发布为新版本,然后他们可以相应地更新其已安装的dll软件包。这至少为他们提供了一种以可控的,稳健的方式针对您的需求进行开发的具体方法。

如果您不熟悉nuget包,则可以在Visual Studio中右键单击解决方案中包含dll的必要项目,然后选择Pack。您还可以通过转到项目属性中的Package选项卡来更改包设置(在项目的相同上下文菜单中,选择Properties)。

您还可以通过命令行执行dotnet pack,该命令行具有很多命令行参数,您可以利用它们。

无论采用哪种方式,您都可以将nuget包发布到nuget.org,使用工件提要的其他服务或仅发布到磁盘上的文件。

有用的Nuget包参考:

关于模式的问题,通常是在运行时切换类似strategy pattern的实现时。 facade是使用单个类抽象掉不同子系统类的多个实例时的情况。例如,假设您有GetUserUpdateUserDeleteUser的操作类。您的外观可以是一个名为UserManager的单一类,在该类中,您可以公开每个用户操作的功能。在这些函数内部,您将访问每个操作类的每个单独实例,并将调用内部传递给这些函数。在此示例中,您在立面内部知道您正在使用3个类。从外部的代码/调用者的角度来看,他们只知道单个UserManager类。

© www.soinside.com 2019 - 2024. All rights reserved.