将自定义库置于接口C#后面

时间:2012-03-11 10:19:40

标签: .net oop interface dependency-injection

我正在尝试在我的计算机视觉应用程序中练习良好的解耦结构。由于我使用的是包装本机OpenCV例程的.net库(EMGU.CV),我需要使用C#接口来抽象出EMGU类,以便将来能够替换它们。

一个具体的例子是:

在EMGU中,我有一个前景检测器类,它暴露Image<T,T>类。这个电话纯粹是以EMGU为导向的。

我正在为我的应用程序开发IBackgroundDetector,这可能会支持不同的背景探测器,包括EMGU。

所以对于我界面中的方法

interface IBackgroundDetector
{
   SomeGeneralImageType GetCurrentBackgroundFrame(SomeGeneralImage CameraFrame);
}

如何创建此SomeGeneralImageType课程以获得良好的架构?

1 个答案:

答案 0 :(得分:0)

我们的想法是创建一个名为ISomeGeneralImageType的接口 声明一组图像所需的方法(查看C#的 Image 作为您可能需要的示例)

然后,对于您创建的每个Image类型,只需继承接口ISomeGeneralImageType并实现方法。

你这样做的方法是使用封装来隐藏你通常会做的所有复杂的东西。

例如(我真的不知道你对象的真实界面,这只是为了表明这个想法):

interface ISomeGeneralImageType
{
   void SetHeight(int height);
   Byte[] GetBitBuffer();
}

class ImageEMGU : ISomeGeneralImageType
{
    private Image<T,T> innerImage;

    public override Byte[] GetBitBuffer()
    { 
       innerImage.GetMeSomeBits()
    }

    public override  SetHeight(int height)
    {
       innerImage.EMGUHight(height);
    }
}

然后,您可以在任何实现界面的图像上使用背景探测器:

interface IBackgroundDetector
{
   SomeGeneralImageType GetCurrentBackgroundFrame(ISomeGeneralImage CameraFrame);
}