概述
挑战
您会提供什么建议?你会怎么做?您希望改变什么样的东西或者您希望采用何种设计方法?我意识到这些问题是非常开放的,甚至可能含糊不清,但我主要是寻找任何可能面临类似挑战的人提供的建议,资源/教程或故事。谢谢!
答案 0 :(得分:2)
我不确定MEF的答案是否能真正解决您的问题。即使使用Interfaces和MEF将实现与合同分开,您仍然需要提供实现(因为我理解您的问题),因此,MEF不会让您不必使用IP来交付程序集。< / p>
最重要的是,如果您需要分发实施程序集,这些第三方将拥有您的IP,并且能够对其进行反编译。我没有办法解决.NET的问题,最后我查了一下。您可以使用obfuscation使其变得更加困难,但这不会阻止某人反编译您的实现,只是让您更难阅读和理解。
正如您所指出的,最好的方法是将实现置于SaaS类型的边界之后,但听起来似乎是不可能的。
我要补充的是,我强烈建议开发一个强大的版本控制模型。这将影响您定义接口/ API的方式,如何随时更改它们以及如何对程序集进行版本化。如果你不小心,并且你没有对你的程序集使用AssemblyVersion
和AssemblyFileVersion
的组合,你将强制从API客户端进行不必要的重新编译,这可能是一个巨大的麻烦(遗憾的是,甚至一些大型控制供应商都没有处理这个问题。 Read up on these,因为我认为它们对API /组件供应商非常重要。
NDAs和/或许可协议是另一种方式,正如@trailmax所示,如果您认为您的用户会尊重此类协议(个人与公司可能会以不同方式查看这些类型的协议)。
哦,还要确保你Sign your Assemblies有一个强名。要做到这一点,您可能需要制定一个策略来保护您的签名密钥。这一开始看起来很简单,但充分保护您的签名密钥并不像第一次看到的那样容易。您经常需要为不同的环境提供多组密钥,需要将密钥合并到CI / CD系统中,并且需要确保对发布密钥的访问保持紧密。
答案 1 :(得分:0)
正如@HighCore已经说过的那样,为你想要公开的所有东西实现接口。将它们放入单独的项目/存储库中,并提供对项目/存储库的只读访问权限。但是你的接口必须正确记录,否则对其他人来说可能会很痛苦。
这样,您的代码对他们来说并不是真正可见的,他们仍然可以使用它。
如果不能解决问题,并且您被迫向他们展示您的代码,请让他们签署NDA。 NDA应声明您的代码是您的代码,并且不能以任何方式重新分发它。
我想我的答案与问题一样模糊,但会给你一些想法。