Хорошим методом для разделения логики и пользовательского интерфейса являются шаблоны Model View Presenter и его варианты (пассивный просмотр и контролирующий контроллер). Есть статьи Мартина Фаулера, а также множество сообщений в блогах, в которых представлены эти паттерны.
Я также предлагаю вам поискать другой вариант MVP, который называется Presenter First . есть хорошая статья об этом, а также хороший пример кода java (ищите пример java)
Создайте свою базовую функциональность (1) и версию командной строки (2) сначала (до точки, где они будут более или менее функционально завершены). Позаботьтесь о том, чтобы тщательно спроектировать / задокументировать свой API. Таким образом, вы не сможете смешивать логику и части графического интерфейса на ранней стадии.
Примером хорошего приложения с разделенной командной строкой / графическим интерфейсом может быть mplayer
, например (хотя можно утверждать, что это похоже на приложение командной строки с застрявшим графическим интерфейсом).
У Фаулера есть отличный обзор архитектур графического интерфейса: http://martinfowler.com/eaaDev/uiArchs.html
Я лично использую конструкцию PresentationModel во всех своих приложениях - она полностью разделяет аспекты представления. из бизнес-логики.