2010-10-14 85 views
4

我有一个应用程序,我设计了这个应用程序有一个相当不错的核心dll,其中包含我的主视图的exe使用的API。我希望允许其他开发人员访问此核心DLL,但我不希望他们拥有和我一样多的访问权限,因为这会带来安全风险。暴露我的核心dll的标准方式是什么?有什么特别的设计模式我应该看?什么是将关键类/方法我的核心API暴露给第三方开发者的最佳方式?

我使用C#

编辑:我的问题是如此这里有点含糊一些澄清

我的程序被部署为Windows EXE它引用core.dll。我希望其他人在启动时通过在/ extensions目录中加载dll来创建可以动态加载到我的程序中的扩展。第三方dll将在我的core.dll中继承/实现某些类/接口。我只想给第三方有限访问我的核心,但我想给我的exe额外访问核心。

我应该提到,这是我第一次编写导入DLL的程序。也许这种允许用户添加扩展的方法是错误的。

+0

你在说什么安全风险? exe在哪里运行(服务器端还是客户端)? – 2010-10-14 03:02:01

+0

@Adrian K - 这实际上是一个很好的观点。我想他正在谈论一个Web API,但这听起来像是他想给其他开发人员“添加”一个缩减的DLL(在他们的项目中添加对DLL的引用)。这不是一个真正的API。 – RPM1984 2010-10-14 03:09:41

+0

我不想进入语义学,但术语SDK更合适吗? – i8abug 2010-10-14 04:22:53

回答

3

如何修改/公开我的API为 其他开发人员?

故意允许其他开发人员与你建立在许多事情上触摸的API,它可以分解为两个方面的工作:

  1. 资源(文档,示例等),这使得它他们更容易理解(是的 - 基本上是一个SDK)。
  2. 构建,构建和部署您的解决方案,以便轻松实际使用。

例子包括:

  • 通过适合再利用的方式包装它。
  • 通过使用其他人可以轻松遵循的命名约定和成员名称。
  • 文档,样本。
  • 提供源代码(作为开源代码),如果您很高兴能够对其进行修改。

我想允许其他开发人员 访问此核心DLL很好,但我 不想让他们有和我一样的访问权限 ,因为这将是一个安全 风险。

好吧,这让我们进入第二个领域 - 实际的解决方案。

你有的问题不是一个小问题 - 但它也相当可行;我建议:

您面临的最大问题是您进入了严肃的架构领域 - 您现在做出的决定将对解决方案的所有方面产生深远影响。所以你可能无法迅速作出明智的决定。仍然 - 你必须从某处开始:)

+0

+1 - 好的答案(基于问题的模糊性)。 – RPM1984 2010-10-14 04:09:32

+0

感谢您的洞察力。我已经更新了一些问题以增加一些清晰度 – i8abug 2010-10-14 04:17:16

+0

谢谢。托管扩展性框架将指向我正确的方向。 – i8abug 2010-10-14 19:28:01

2

由于您使用的是C#,我会查看微软的Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries并使用FxCop来强制其中的很多(最新版本here)。这不是你可能需要的全部,但它会帮助你朝正确的方向发展。

此外,请看同一作者免费提供的框架设计指南distillation

+0

感谢您的链接。我只是通过升级阅读,它提供了一些我可以做的事情清理我的API的好点。它不包括安全问题(除非我错过了),但也许它在书中。我会在这个周末看看它。 – i8abug 2010-10-14 04:02:55

+0

我不认为这本书会进入安全本身。我提供了链接,因为它会帮助代码更易于使用(即抛出的异常符合某个标准,而不是暴露列表(使用IList 代替)),并有助于使其更稳定。对于关于架构考虑的其他建议有很多的重要性,而我第二个想法是在你的核心功能之上加入一个图层 – Matt 2010-10-14 12:20:39

+0

这很不错,只是想补充说我找到了一个演示文稿的链接,比蒸馏更详细一点。http://www.myplick.com/view/27oOmIWNgx-/Brad-Abrams-Framework-Design-Guidelines – i8abug 2010-10-16 05:22:14

2

“设计模式”在API方面与REST更相关。

我不希望他们有尽可能多的 访问的我,因为这将是一个 安全风险

那么我会(用于维护的缘故),层顶核心DLL额外的逻辑来防止这种情况。

事情是,“客户”调用API,而不是核心DLL。

“如何”API访问核心DLL是在你的完全控制之下。只是暴露你希望的运营合同。

+0

我从来没有公开过一个API,其中安全性是一个问题。我在我的核心dll的顶部?我可以创建一个API dll,但它需要引用核心。如果用户想要,他们仍然可以通过API的dll和使用核心,除非有某种方式锁定它。 – i8abug 2010-10-14 03:58:35

+0

@ i8abug - @Adrian K的回答会帮助你。这听起来并不像是在暴露一个API,而只是“给开发人员代码” - 在他们的程序集中引用。如果是这种情况,则需要修改Core.dll上的可访问性修饰符。要么,要么不给他们的DLL,让他们以另一种方式使用功能(基于REST的服务,WCF等 - 一个“真正的”API) – RPM1984 2010-10-14 04:11:22

相关问题