我正在尝试灵活地组织我的代码。所以我的应用程序大量使用接口。在我的控制器类中,我想在视图中的某个控件上启动网络摄像头预览。 ClientView和WebcamPreview的实现相互依赖。因此,WinForms有一个特定的WebcamPreview,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框架呢?
答案 0 :(得分:2)
选项3:
abstract class AbstractControl { }
class WinFormsControl : AbstractControl { }
class WpfControl : AbstractControl { }
interface IClientView
{
AbstractControl SelfControl { get; }
}
答案 1 :(得分:1)
选项1是要走的路。选项2将非常快速地使用指令。如果有一天,除了WPF和Winform之外,你发现自己必须为Windows Phone和Web应用程序做,你必须触摸大量代码来添加新的#elif指令。在这一点上,代码不会太令人愉快。使用选项1和一些好的组织,即WPF进入1个程序集,Winform另一个,未来的添加,例如Windows Phone可能不需要重新编译现有代码。如果是这样,可能非常小。