独立于UI框架进行开发

本文关键字:开发 框架 UI 独立 | 更新日期: 2023-09-27 18:21:54

我正在努力灵活地组织我的代码。因此,我的应用程序大量使用接口。在我的控制器类中,我想在视图中的某个控件上启动网络摄像头预览。ClientView和WebcamPreview的实现相互依赖。因此,有一个特定的WebcamPreview适用于WinForms和WPF。我以两种可能的方式结束:

选项1:

优点:通用

缺点:泛型声明一直到顶级控制器类,我需要在其中声明至少3个泛型。(也许我做错了什么?)

interface IClientView<TSelf>
{
    TSelf SelfControl { get; }
}
interface IWebcamPreview<TSelf>
{
    void Start(TSelf selfControl);
}

选项2:

优点:避免很多仿制药

缺点:指令;将为WPF和WinForms 编译不同的程序集

interface IClientView
{
#if WPF
    ControlBase SelfControl { get; }
#else // WinForms
    PictureBox SelfControl { get; }
#endif
}
interface IWebcamPreview
{
    // analog
}

那么,我如何组织我的代码以支持不同的UI框架呢?

独立于UI框架进行开发

选项3:

abstract class AbstractControl { }
class WinFormsControl : AbstractControl { }
class WpfControl : AbstractControl { }
interface IClientView
{
   AbstractControl SelfControl { get; }
}

选项1就是我们要走的路。选项2将很快忙于指令。如果有一天,你发现自己除了WPF和Winform之外,还必须为Windows Phone和Web应用程序做一些事情,你将不得不接触大量代码来添加新的#elif指令。代码在这一点上不会太令人愉快。有了选项1和一些好的组织,即WPF进入1程序集,Winform另一个未来添加的程序,如Windows Phone,可能甚至不需要重新编译现有代码。如果是的话,可能是非常小的。