Условная компиляция компонентов и логики пользовательского интерфейса - PullRequest
2 голосов
/ 07 июля 2010

Я смотрю на создание нескольких версий моего приложения с ограниченными функциональными возможностями, и я хотел бы опустить код, который не нужен в более простых версиях.Будучи приложением WinForms, пользовательский интерфейс должен будет меняться для каждой версии - без отображения ограниченных элементов управления.

Я предпринял попытку аннотировать части автоматически сгенерированного кода элементов управления и макета с помощью операторов условной компиляции, но обнаружил, что VS выбрасывает весь мой код, как только я что-то трогаю, с помощью дизайнера WinForms.

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

Спасибо!

1 Ответ

1 голос
/ 07 июля 2010

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

Также, если вы используете шаблон представления (если вы еще этого не делаете), такой как MVC или MVP, вы можете минимизировать логику, которую вы используете в формах, и передать ее в ведущий / контроллер или даже в бизнес-классы, которые можно настроить на основе на версии, против которой вы компилируете. Эти классы могут вводиться (DI) в приложение в зависимости от конфигурации.

Другой вариант - не компилировать элементы управления формой, а скрыть их в зависимости от используемой версии, но скомпилировать бизнес-классы. Таким образом, важный «интеллектуальный» код отсутствует в приложении, и вы не боретесь с конструктором winform.

...