独立于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框架呢?
选项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,可能甚至不需要重新编译现有代码。如果是的话,可能是非常小的。