Я пытаюсь организовать мой код гибким. Поэтому мое приложение сильно использует интерфейсы. В моем классе контроллера я хочу запустить предварительный просмотр веб-камеры на определенном элементе управления в представлении. Реализации ClientView и WebcamPreview полагаются друг на друга. Таким образом, существует один конкретный WebcamPreview для WinForms и один для WPF. Я закончил с 2-мя возможными способами:Разработка независимо от рамки пользовательского интерфейса
Вариант 1:
За: Непатентованные
Против: Generic деклараций пузырь до верхнего класса контроллера, и мне нужно, чтобы объявить по крайней мере 3 дженерики в нем , (Может быть, я делаю что-то не так?)
interface IClientView<TSelf>
{
TSelf SelfControl { get; }
}
interface IWebcamPreview<TSelf>
{
void Start(TSelf selfControl);
}
Вариант 2:
Pros: Избегает к гораздо дженериков
Cons: Директивы; будет собирать различные сборки для WPF и WinForms
interface IClientView
{
#if WPF
ControlBase SelfControl { get; }
#else // WinForms
PictureBox SelfControl { get; }
#endif
}
interface IWebcamPreview
{
// analog
}
Так как я организую свой код для поддержки различных структур пользовательского интерфейса?
Показывая свои решения, я думаю, что вы отвлеклись немного от своей первоначальной проблемы. Я * думаю * ваш дизайн 'IWebcamPreview' может быть ... немного перевернутым, из-за лучшего слова. Идеальное решение не будет полагаться на ВСЕ на элемент управления, который был прикреплен к нему - он мог бы - возможно, предоставить канал, который вы могли бы подключить к другим элементам управления, независимо от того, являются ли они WPF или Winforms ...? – perfectionist
Как пример: я использую DirectShow для предварительного просмотра (и захвата) изображения веб-камеры. DirectShow нуждается в ручке (IntPtr) элемента управления, где он должен сделать предварительный просмотр. Итак, как я должен его развязать? – Matthias