3

我的公司目前正在用 C# 创建一个大型多层软件包。我们对该结构采用了 SOA 方法,我想知道是否有人对如何使其具有编程知识的用户可扩展有任何建议。

这将涉及两个过程:生产系统管理员批准使用特定插件,以及实际插件架构本身。

我们希望允许用户编写脚本来执行常见任务、修改用户界面的布局(用 WPF 编写)并添加新功能(即允许制表数据的图表)。有没有人对如何实现这一点有任何建议,或者知道从哪里可以获得做这种事情的知识?

我认为这将是发布具有限制分发许可证的开源软件的完美角落案例,但是,我并不热衷于允许竞争对手访问我们的源代码。

谢谢。

编辑:我想我只是澄清一下为什么我选择了我所做的答案。我指的是我公司外部的生产管理员(即客户),并让他们以某种方式以更简单的方式自动化/编写脚本,而不需要他们完全了解 c#(他们大多是编程有限的最终用户经验)-我更多地考虑的是DSL。这可能是一个遥不可及的目标,而托管可扩展性框架似乎提供了迄今为止最好的折衷方案。

4

7 回答 7

8

只需使用接口。定义每个插件必须实现的 IPlugin,并使用定义良好的消息传递层来允许插件在主程序中进行更改。你可能想看看像 Mediaportal 或 Meedios 这样严重依赖用户插件的程序。

于 2009-03-24T12:32:59.213 回答
6

正如史蒂夫所提到的,使用接口可能是要走的路。您需要设计一组您希望客户使用的接口,设计插件的入口点以及插件通信模型。除了 Steve 的建议之外,您可能还想看看Eclipse项目。他们有一个非常明确的插件架构,即使它是用 Java 编写的,也值得一看。

另一种方法可能是设计一个可用于脚本语言的 API。IronPythonBoo都是 动态脚本语言,可以很好地与 C# 配合使用。使用这种方法,您的客户可以编写脚本来与您的应用程序交互并扩展您的应用程序。与完整的插件系统相比,这种方法更像是一种轻量级的解决方案。

于 2009-03-24T12:45:40.260 回答
4

我想看看微软的MEF计划。它是一个框架,可让您为应用程序添加可扩展性。它现在处于测试阶段,但应该是 .Net 4.0 的一部分。

Microsoft 共享源代码,因此您可以查看它的实现方式和与之交互的方式。所以基本上你的可扩展性框架将对所有人开放,但它不会强迫你发布你的应用程序代码或插件代码。

于 2009-03-24T13:08:41.093 回答
2

开源对于使产品可扩展的任何形式或形式都不是必需的。

于 2009-03-24T12:54:30.690 回答
1

我同意在这种情况下开源是一个可怕的想法。当您说由生产管理员批准时 - 是您公司内部的管理员还是外部管理员?

就个人而言,我会考虑通过继承(允许第三方在不提供源代码的情况下对您的代码进行子类化)和非常仔细地指定访问修饰符来实现可扩展性。

于 2009-03-24T12:25:24.303 回答
1

Microsoft 已经做到了这一点,从而产生了 Reporting Services,它具有您提到的每个属性:用户定义的布局、可编写脚本、图表、可定制的 UI。这包括一个可下载的 IDE。没有提供或要求访问源代码,但它绝对充斥着可扩展性挂钩。缺少源代码会抑制紧密耦合并促进 SOA 思维。

于 2009-03-24T13:06:41.050 回答
0

我们目前处于类似的情况。我们确定了人们可能希望在数据级别上创建实时连接的不同场景。在这种情况下,他们可以访问单一网络服务来请求和导入数据。

在某些时候,他们可能希望拥有一个自定义用户界面(在我们的例子中是 Silverlight 2)。对于这种情况,我们可以提供一个基类并让他们在中央存储库中注册模块。然后它以统一的方式集成到我们的应用程序中,包括安全性、形式和行为以及与服务的交互。

于 2009-03-24T13:21:16.663 回答