C#接口在不同的svn项目之间共享

时间:2014-11-12 15:22:00

标签: c# svn interface

我是一个C ++人,必须与一些C#项目合作,因此我有疑问。将两个项目放在不同的svn服务器上,我需要它们共享接口类。如何在C#中解决 例如,我有cs文件,它具有用于将数据传递给接口的接口和类,即

Public Class data
{
    public int a;
    public int b;
}
Public Interface Ifoo
{
    int foo(data);
}

此接口在ProjectA中实现并由ProjectB使用 我希望能够选择接口的实现,以便在ProjectB的测试中我将使用Ifoo接口的特殊实现。使用以下方法选择不同的dll:

 Assembly assembly = Assembly.LoadFrom(asm_name);
 fooer = assembly.CreateInstance(class_name) as Ifoo;

我应该在哪里放置Ifoo接口?
我认为应该将它放在ProjectA svn repo中(因为ProjectA是接口的所有者),然后将其作为外部结帐并签出ProjectB。

你能告诉我这种情况下的经验法则是什么?

BR
Krzysztof

1 个答案:

答案 0 :(得分:0)

首先,无论你决定放置你的界面和相关的数据类(项目A或项目B svn还是新的),第一个(而且非常明显的)推荐是你把它们放在自己的库中( DLL),不依赖于其他对象,因此很容易在不同的项目中共享它。

要在不同的项目上使用它(无论是否在另一个svn存储库中),您必须为该项目提供对此接口/数据类的物理访问。在自己的dll上,没有要求其他对象的约束,在项目中添加库的引用是一件简单的事情。

使用两个项目的本地副本,您无需将库本身复制到另一个项目中。

在任何情况下,您都必须仔细考虑您的界面和数据,这样您就不会对其进行更改,以避免项目之间出现兼容性问题。如果由于新功能需要向接口“添加”某些内容,请改为创建一个新接口(并将其放在其他DLL上)。这样,您将保持与未实现新功能的其他项目的兼容性。

如果与接口关联的数据如此具体,以至于任何实现此接口的类都将仅由项目A使用,那么,将DLL放入项目A的明显位置通常就是软件的情况。有能力使用插件。接口位于dll中,可以“公开”提供给无法访问主项目本身的插件开发人员。这很简单,可以下载DLL。 Beijng在主项目和插件上使用的SAME dll,都没有问题(原因是没有改变它)。

但是如果您的界面更“通用”并且用于创建类似框架的东西,那么不同的项目(不相关/不依赖)可以单独使用它,而不是建议在第三个项目中分离它(与它自己的svn)更有趣。使用关于此接口开发的良好策略,对于保留框架的问题将更少。

在评论中,您说可以将“界面”与项目A相关联,但如果您可以在项目B中使用它而不涉及项目A,则可以将界面与项目B关联起来,因此,将接口/相关数据移动到一个单独的项目的选项是可取的。

在任何情况下,下划线实现都是无关紧要的,因为我们在C#中使用接口的主要原因是能够以“通用方式”使用对象而不必(必然)必须关心它是如何实现的。