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

标签 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中实现这个接口(interface)

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

        // Call a bunch of complicated logic

        return dataValidates;
    }
}

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

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

编辑:

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

最佳答案

不,这不是一个糟糕的解决方案。

事实上,将公共(public)逻辑移动到它自己的程序集中更可取。这节省了代码重复和维护成本。

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

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

关于c# - 以这种方式在项目之间创建引用是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576885/

相关文章:

c# - IEnumerable<T> 和 IEnumerable 的访问修饰符

c# - 如何将字符串转换为十六进制字节数组?

c# - 选择 Distinct Count 真的很慢

reflection - AspectJ - 是否可以扩展枚举的值?

c# - 仅获取实现接口(interface)的属性

c# - 动态生成属性表达式和空参数

java - 为什么 java.lang.Object.getClass() (和反射)比平时慢?

c# - .Net HashSet 唯一性计算是否完全基于Hash Codes?

c# - 传递 Windows 服务参数以供其执行

c# - 如何动态或在运行时设置 PropertyGrid 的 DefaultValueAttribute?