问题标签 [extensibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
149 浏览

wcf - 我在哪里插入 WCF 以在消息到达时收到通知?

我正在编写一个示例控制台服务主机,我想插入 WCF 堆栈以便能够在新消息到达时将消息打印到控制台,即使它目前不会被服务处理(因为服务正在工作以前的电话)。这是基于我的假设,即到达的消息由 WCF 排队,对吗?

此外,如果这很重要,我正在使用 netTcpBinding。

0 投票
5 回答
2633 浏览

.net - 什么插件/工作台框架是 Eclipse RCP 的最佳 .NET 替代品?

我正在寻找一个可与 Eclipse 插件框架相媲美的基于插件的应用程序框架,在我看来,它包括:

  1. 一个核心插件管理框架(Equinox / OSGI),它提供了声明扩展端点的能力,然后发现和加载为这些端点提供服务的插件。(这与依赖注入不同,但不可否认,差异是微妙的 - 配置高度分散,存在版本控制问题,可能涉及在线插件存储库,对我来说最重要的是,用户应该很容易添加插件,无需了解底层架构/配置文件)
  2. 多层插件,提供基本的工作台外壳,支持并发、命令、首选项表、菜单、工具栏、键绑定等。

这只是触及了 RCP 的表面,它本身旨在作为您的应用程序的基础,您可以通过编写/组装更多插件来构建它。


以下是我这两天从网上搜集到的……

据我所知,.NET 世界中没有任何东西可以远程接近 Eclipse RCP for Java 的健壮性和成熟度,但是有几个竞争者在 #1 或 #2 方面做得很好。

(我还要提一下,我还没有对 WinForms 和 WPF 做出最终决定,所以我也在尝试了解任何候选框架中的 UI 耦合程度。我也想知道平台耦合和源代码许可)

我必须说,开源的东西通常文档较少但更容易理解,而 MS 的东西通常有更多的文档但更难访问,所以对于许多 MS 技术,我想知道它们实际上做了什么,在实际意义上。

这些是我找到的库:

夏普发展

我看到的第一件事是 SharpDevelop,它以基本的方式同时执行 #1 和 #2(没有侮辱 SharpDevelop,这是令人钦佩的 - 我的意思是比 Eclipse RCP更基本)。然而,SharpDevelop 是一个应用程序而不是一个框架,并且存在基本的假设和限制(即在某种程度上与 WinForms 耦合)。尽管如此,还是有一些关于 CodeProject 的文章解释了如何将其用作应用程序的基础。

系统插件

System.Addins 似乎旨在提供一个强大的加载项加载框架,具有一些复杂的选项,用于加载具有不同信任级别的程序集,甚至运行进程外。它似乎主要是基于代码的,而且代码量很大,有许多程序集用于隔离版本控制问题。使用 Guidance Automation 生成大量代码。

到目前为止,我还没有找到很多 System.AddIns 文章来说明如何使用它来构建类似 Eclipse RCP 的东西,而且许多人似乎对它的复杂性感到不安。

单声道插件

Mono.Addins 似乎受到 System.Addins、SharpDevelop 和 MonoDevelop 的影响。它似乎提供了 System.Addins 的基础知识,插件加载选项不太复杂,但更简单,具有基于属性的注册、XML 清单和在线插件存储库的基础设施。

它有一个很好的常见问题解答和文档,以及一组相当健壮的示例,这些示例真正有助于描绘如何开发像 SharpDevelop 或 Eclipse 这样的架构。这些示例将 GTK 用于 UI,但框架本身并未与 GTK 耦合。所以它似乎很好地完成了#1(加载项加载),并为#2(工作台框架)指明了方向。看起来 Mono.Addins 是从 MonoDevelop 派生的,但我还没有真正研究过 MonoDevelop 是否提供了一个好的核心工作台框架。

托管可扩展性框架

这是目前每个人都在谈论的内容,并且它的作用正在慢慢变得清晰,但我仍然很模糊,即使在阅读了几篇关于 SO 的帖子之后。官方的说法是它“可以与 System.Addins 并存”。但是,它没有引用它,并且似乎重现了它的一些功能。因此,在我看来,它是 System.Addins 的更简单、更易于访问的替代方案。

它似乎更像 Mono.Addins,因为它提供了基于属性的连接。它提供了可以基于属性或基于目录的“目录”。它似乎没有提供任何 XML 或基于清单的连接。到目前为止,我还没有找到太多的文档,而且这些示例似乎有点“神奇”,更让人联想到基于属性的 DI,尽管澄清说 MEF 不是 DI 容器。

它的许可证刚刚开放,但它确实引用了 WindowsBase——不确定这是否意味着它与 Windows 耦合。

卫城

我不确定这是什么。是 MEF,还是即将到来的?

复合应用程序块

WPF 和 Winforms 复合应用程序块似乎提供了更多的工作台框架。我对这些几乎没有经验,但它们似乎在很大程度上依赖于 Guidance Automation,显然与 UI 层相结合。有几个将 MEF 与这些应用程序块相结合的示例。


我已经尽我所能在这里回答我自己的问题,但我真的只是在摸索表面,而且我对这些框架中的任何一个都没有经验。希望你们中的一些人可以添加有关您所使用的框架的更多细节。如果我们最终能得到某种比较矩阵,那就太好了。

0 投票
2 回答
830 浏览

.net - 在 .NET 中,您将如何处理允许多租户 SaaS 应用程序的租户任意向模型实体添加属性?

因此,我们正在构建一个多租户系统以作为服务运行。我们从头开始。我们正在关注 DDD;该域(目前)有大约 20 个实体,以后还会有更多。它由我们托管,地理上冗余(除了 SQL 查询之外的所有内容都有 n+1 ;-) ),并且设计灵活(嗯,最后是我们自己的要求,而不是业务',尽管他们希望我们能够当然可以根据需要轻松更改它)。我们基于 .NET,并将使用关系数据库作为我们的后备存储。我们并不反对(完全)使用开源工具和库。

业务的必备功能之一是系统的租户可以扩展某些实体。例如,客户端 A 可能希望实体 Foo 具有 Title 和 Abstract 属性,而客户端 B 可能希望实体 Foo 具有 Publish Date 和 Directed-By 属性——而不是 Title Abstract。

也可能是它应该为需要的租户支持多种语言的数据 - 例如,一个租户可能有兴趣将其整个帐户翻译成两种(或更多)语言;“静态”字符串和作为数据附加到实体的字符串。

所以。任意数量的字段(在一些通用基线之上;所有租户都将获得关于这些实体的某些内容),可由客户端定义(他们也可以在其中定义数据类型)。数据翻译的可能性(不复制实体 - 例如,没有用英语设置一组,然后用法语设置相同的一组)。强类型、可搜索、可查询的后备存储也是如此(因此,XML 字段中没有额外的东西,除非有办法让它成为强类型和可搜索的)。高性能(但作为次要要求;该功能非常重要,可以在必要时购买硬件)。

数据量?在我们当前的系统中,一个“普通”客户端有数百个实体,一个“大”客户端有数千个实体。请求通常会过滤这些列表以显示在 10-200 之间,最常见的事情可能涉及六个实体(在新系统中应该是可扩展的)。

其他点?每个实体都有指向拥有它的租户的直接链接。

在 .NET 领域如何处理这个问题?有人建议我们将实体放入一个 IoC 容器中,并在运行时动态地将它们 glob 在一起——但是如何将其映射到关系数据库呢?

我还记得很久以前读过Ayende关于 Lucene.NET 的帖子,这听起来不错,但目前我们还没有任何使用 Lucene.NET 或 nHibernate 的经验。(我们目前将 Linq2Sql 用于我们的 ORM,但如果我们需要更改它以支持这一点,坦率地说,我个人会很高兴)。

我读了这个从 Ayende 链接的 Castle dev list thread,看起来 nHibernate 有一个叫做 IUserType 的东西可能会有所帮助——我想知道我们是否可以应用它,为每个租户拉出适当的 IoC?因此,每个可扩展实体的每个租户都有一个 IUserType,并将数据本身存储在 SQL Server(我们最可能的 RDBMS)内部的 XML 列中。

最后,我刚刚阅读了一个关于动态更改每个租户每个实体的 DB 表的建议 - 但这听起来很不错......老实说,令人担忧!我的意思是,它可以工作,但将这种能力授予租户(他们可能不太懂技术)听起来并不是一个好主意。我想它可能仅限于管理员员工......

0 投票
1 回答
232 浏览

build-process - 如何在 Visual Build Professional 中构建迭代的用户定义动作?

在 VBP 中,可以通过创建自定义 COM 组件或自定义脚本来定义用户定义的操作。

我需要创建一个用户定义的操作iterative,这意味着它必须以迭代方式调用子步骤,就像内置操作的“流程文件”一样。

我不知道如何做到这一点,谷歌也没有帮助。

0 投票
5 回答
299 浏览

architecture - 使应用程序可定制的最佳实践?

我有兴趣阅读其他开发人员和架构师处理为某些站点定制其应用程序某些区域的各种方式。调用客户实现的前后处理、执行相同操作的事件、允许覆盖业务逻辑方法、使用具有可插拔模块的策略、数据可配置流程(例如规则引擎、脚本等)。

清单可以继续,但我要问的是谁使用了这些方法,每种方法的优缺点是什么,以及还有哪些其他方法。

这假设我们不创建客户特定的代码分支来适应这些定制。

0 投票
1 回答
1316 浏览

visual-studio - Visual Studio 远程调试可扩展性

我正在尝试使用类似于以下代码的远程计算机附加:

我已经通过远程桌面登录并手动启动调试器来让它工作,但我必须保持登录状态。问题是,我不想保持登录到远程机器。有没有办法自动启动调试器,类似于我通过 IDE 附加时发生的情况?

0 投票
4 回答
279 浏览

asp.net - ASP.NET 3.5 Web 应用程序项目是否可以“进行中”扩展或修补?

在构建 ASP.NET 3.5 WAP 时,我总是感到沮丧,因为无论我如何“隔离”或“封装”逻辑或 UI 位,我仍然会在需要时随时关闭整个站点更新一行代码。我可能会误解 ASP.NET 如何处理“bin”目录中的更改,但考虑到“为什么我的 AppDomain 正在卸载?”的数量。各个组中的消息,这似乎仍然是要避免的。

有没有人有任何指导和/或框架来真正模块化 ASP.NET 3.5 WAP,以便可以“在飞行中”添加/更新逻辑和页面?我用 Google 搜索了 System.AddIn,但它似乎专注于 WPF 应用程序。

谢谢你的帮助!

詹姆斯怀特

0 投票
3 回答
97 浏览

.net - 如何通知接口的实现者“路径”参数代表一个文件夹?

我即将在我的应用程序中定义一个接口,插件编写者可以实现该接口以提供用户定义的“导出”功能。它看起来像这样:

但是,我需要让插件编写者知道(明确地,不仅仅是在文档中)“路径”代表一个文件夹,而不是文件名。作为导出过程的一部分,他们有责任创建文件。

强制路径是文件夹而不是文件名的最佳方法是什么?我现在最好的猜测是使用 DirectoryInfo 而不是字符串:

这是一个好的解决方案,还是在传递 DirectoryInfo 实例时存在我不知道的陷阱?

0 投票
13 回答
28863 浏览

language-agnostic - 如何设计可扩展的软件(插件架构)?

我需要一些资源来讨论如何将您的软件设计为可扩展的,即,以便其他人可以编写附加组件/插件来为其添加功能。

你有什么建议吗?有没有讨论这个主题的书?
我更喜欢简明扼要的东西;一点理论和一堆具体的例子。

我不是针对特定的语言,我希望能够理解核心思想,以便我可以用任何语言实现它。

出于同样的原因,我不喜欢使用别人构建的框架(除非框架不是很高级,即没有隐藏太多),目前我只想自学主题并尝试各种方法来实现它。另外,一个框架通常假设用户对主题的了解。

更新

我不是在询问 OOP 或允许我的类被继承。我说的是设计一个将部署在系统上的应用程序,这样它就可以在部署后由第三方附加组件进行扩展。

例如,Notepad++ 有一个插件架构,您可以在其中将 .dll 文件放置在 plugins 文件夹中,并为应用程序添加不存在的功能,例如颜色选择、片段插入或许多其他功能(广泛的功能)。

0 投票
2 回答
2225 浏览

visual-studio - VS2010 可扩展性 - 它有什么不同?

给那些已经看过 VS2010 的人一个问题。为了让他们的插件在 VS2010 下工作,插件开发人员必须做出多大的改变?