使用来自其他模块的 类

Using classes from other modules

我在一个项目中工作,该项目有多个由不同团队制作的模块。

我必须使用来自其他模块(引用 dll)的存储库和代码优先实体 类,但我无法访问代码,也无法修改它。

我想保护自己免受外部代码结构变化的影响,并且我想向那些 类 添加功能。

最好的方法是什么?

我正在考虑制作类似服务层的东西;获取外部数据,添加一些功能并解析为我自己的 类 以避免在我的代码中额外依赖外部程序集。

如果哪天外部类变了,我只需要修改这个服务层就可以了

你怎么看?其他方法吗?我只能改变我的模块。

非常感谢!

我想不出更适合这种情况的复杂方法,但您需要的是某种抽象。您可以创建一个包装器对象,也可以像下面这样简单:

public class MyType
{
    // Your own implementation
    // Properties
    // And methods

    public static MyType Create(TheirEntity entity)
    {
        // Create an instance of your type from their object
    }

    // Or provide a conversion operator, it could be implicit if you'd like
    public static explicit MyType(TheirEntity entity)
    {
         // Implement a conversion here
    }
}

如果您仍想使用来自外部库的存储库,为什么不继承您想要扩展的 类?如果您不需要添加属性或字段,我会使用扩展方法。这些将允许您在外部 类.

上使用您的项目特定功能

团队必须通力合作!

针对接口而不是具体的 classes 工作是个好主意。 类 应该实现代表其不同方面的不同接口。也许 classes 本身可以拆分成更小的只负责一个职责。

参见:Interface segregation principle
参见:Single responsibility principle.

如果您只使用对象的一部分,那么让您依赖整个对象是没有意义的。如果您针对代表您正在使用的 class 的各个方面的界面工作,则其他部分的更改不太可能影响您。但是团队必须坐在一起定义这些接口。