繁体   English   中英

无需开源的可扩展性

[英]Extensibility without Open-Source

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

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

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

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

谢谢。

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

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

正如史蒂夫所说,使用接口可能是 go 的方式。 您需要设计一组您希望客户使用的接口,设计插件的入口点以及插件通信 model。 除了史蒂夫的建议,您可能还想看看Eclipse项目。 他们有一个非常明确的插件架构,即使它是用 java 编写的,也可能值得一看。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM