2012-03-11 49 views
0

我正试图在我的计算机视觉应用中练习优质的去耦合架构。由于我使用的是封装原生OpenCV例程的.net库(EMGU.CV),因此我需要使用C#接口来抽象出EMGU类,以便将来能够替代它们。在界面C后面放置自定义库#

一个具体的例子是:

在EMGU我有前景检测器类,暴露Image<T,T>类。这个电话纯粹是面向EMGU的。

我的工作IBackgroundDetector我的应用程序,这可能会支持不同的背景探测器,包括EMGU。

所以对于一个方法在我的界面

interface IBackgroundDetector 
{ 
    SomeGeneralImageType GetCurrentBackgroundFrame(SomeGeneralImage CameraFrame); 
} 

如何去创造这个SomeGeneralImageType类来获得良好的架构?

+1

不要这样做,直到你真的*有*另一个实现可供选择。你只是猜测它没有。 – 2012-03-11 16:22:11

回答

0

的想法是创建一个名为ISomeGeneralImageType接口。
声明一堆的方法,你将需要为影像(看看C#的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); 
}