Короткий ответ на ваш вопрос - да - просто выделите код, которым вы хотите поделиться между двумя представлениями, в независимый от интерфейса класс, предпочтительно в отдельную сборку, и включите эту сборку.
Длинный ответ более сложен - способность делать это будет варьироваться в зависимости от приложения и приложения. Вы сможете выделить меньше кода для приложений с интенсивным пользовательским интерфейсом, которые мало что делают за кулисами (например, какая-то графическая игра), чем для очень простого приложения с пользовательским интерфейсом, которое делает много позади сцены (скажем, пользовательский интерфейс, состоящий из одной кнопки, которая затем запускает сложный процесс манипулирования данными).
В конце концов .NET предоставляет вам возможность сделать это. Ваша реальная способность сделать это будет очень зависеть от ваших собственных дизайнерских способностей и ваших конкретных требований. На эту тему доступно много работ - я предлагаю начать с рассмотрения шаблонов проектирования (хотя в оригинальной книге приводятся примеры на C ++, я считаю, что кто-то написал книгу с примерами на C #. Однако я не могу говорить с качество его.)