C# 以这种方式在项目之间创建引用是一种不好的做法吗?

C# 以这种方式在项目之间创建引用是一种不好的做法吗?,c#,reflection,C#,Reflection,我有Validator.sln、A.sln、B.sln、C.sln A、 B和C是具有不同主要功能的大型项目。我想使用它们的一些逻辑来验证一段数据 因此,在Validator.sln中,我有一个源文件,其中包含: public interface IValidator { bool Validate(int myData); } 我想在A、B和C中实现这个接口。也就是说 public Validator : IValidator { bool Validate(int myDa

我有Validator.sln、A.sln、B.sln、C.sln

A、 B和C是具有不同主要功能的大型项目。我想使用它们的一些逻辑来验证一段数据

因此,在Validator.sln中,我有一个源文件,其中包含:

public interface IValidator
{
    bool Validate(int myData);
}
我想在A、B和C中实现这个接口。也就是说

public Validator : IValidator
{
    bool Validate(int myData)
    {
        bool dataValidates = true;

        // Call a bunch of complicated logic

        return dataValidates;
    }
}
(这不会编译,因为在此上下文中未定义IValidator。)

我可以从一个到验证器创建一个程序集引用,在大多数情况下,验证器是独立的程序这是一个糟糕的解决方案吗?

编辑:


我还可以将AValidator放入Validator.sln中,然后在运行时动态链接我想要的程序集。但是这样做有点违背了界面的目的?

不,这是一个不错的解决方案

事实上,最好将公共逻辑移到它自己的程序集中。这节省了代码复制和维护成本

您还应该考虑将其他三个项目中常见的逻辑移到新的程序集中。


我们的设置与您描述的类似。我们有一个在3个小型应用程序之间共享的公共程序集,它还有业务验证(政府)规则。跨所有三个应用程序更新规则非常简单,因为它只在一个地方进行。

这不是最好的解决方案,但根据您提出的两个概念:

  • 其他都是大项目
  • 可能它们不完全是你写的
如果这样做有效,这是一个可接受的解决方案。但这是否是一个好的解决方案,取决于您的业务资源。因此,试着问以下问题:

  • 您是否有足够的时间在不破坏任何其他内容的情况下提取需要在不同项目之间共享的部分

  • 这涉及到多少风险?这些项目对您的业务有多重要

  • 这一切都值得你付出估计的努力吗


祝你好运。

你能拆分常用功能并从中创建一个库吗?然后你只需要包含库,独立解决方案之间没有硬引用,这就是你应该做的。A、 B和C需要引用该验证器才能使用它。如果所有解决方案之间的代码行数不到100000行,那么我会质疑您的设计——非常大的项目,有20名开发人员在这些项目上工作了多年,这是另一种情况。@IanRingrose超过100000行,超过20名开发人员。+1。你已经谈到了这个问题的另一个重要方面:这样做有用吗/成本效益高吗。。我想说这一直都是。。但其他人可能不同意。@SimonWhitehead:我们发展是为了赚钱,所以这是否真的是一个成本效益高的IT业务,这取决于经理们的决定。相反,从纯IT工程的角度来看,是的,最好重构并将公共逻辑放入共享程序集中。但我们并不是在一个完美的世界里……我同意你们的看法。我想我是幸运的-我处在这样一个位置,在我们的代码库中我有很多发言权。。幸运的是,在我们重构代码的过程中,我们的业务可以存活几个月(如果我们决定这样做几个月!)。