Как избежать параллельных иерархий наследования среди элементов управления GUI и объектов домена - PullRequest
3 голосов
/ 07 февраля 2010

Я занимаюсь разработкой приложения Windows Forms на C #. Я использую шаблон проектирования MVP. В графическом интерфейсе пользователь может манипулировать объектами принтера, и должны быть пользовательские элементы управления, которые представляют объекты принтера пользователю.

Существует иерархия классов, которая представляет принтеры. В основе находится абстрактный класс Printer. Затем есть абстрактный класс InkJetPrinter и абстрактный класс LaserPrinter, каждый из которых наследуется от Printer. Конкретные классы представляют различные марки и модели принтеров и наследуются от InkJetPrinter или LaserPrinter.

Каждый класс UserControl в графическом интерфейсе, который представляет принтер, должен иметь функции и возможности, специфичные для данного типа принтера. Например, у струйного принтера может быть дисплей, показывающий уровень чернил, у определенной модели лазерного принтера могут быть специальные функции, доступ к которым можно получить с помощью дополнительной кнопки на элементе управления и т. Д.

Я не вижу лучшего способа справиться с этим, чем иметь иерархию наследования классов UserControl, параллельную иерархии наследования классов Printer. Есть ли лучший подход?

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Не думаю, что это классическая иерархия параллельного наследования? Если бы это было так, то я думаю, что потребуется , чтобы написать класс управления с графическим интерфейсом, чтобы классы принтера без графического интерфейса полностью работали. Это не так, поскольку можно написать полнофункциональное приложение без графического интерфейса, просто используя классы принтера, а не сопутствующие классы UserControl.

1 голос
/ 07 февраля 2010

В этом проекте вам, вероятно, понадобятся LaserPrinterControl и InkJetPrinterControl, но им не требуется для получения из PrinterControl. Например, вы можете оба предоставить дочерний элемент управления «PrinterControl».

Недостатком является немного больше связующего кода, но преимущество заключается в том, что вы имеете полный контроль над поведением PrinterControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...