Это действительно вопрос практики и самодисциплины. Я имею в виду, мы все это сделали. И мы все продолжаем это время от времени при неправильных условиях (менеджер/клиент кричит, чтобы что-то сделать «прямо сейчас» против «права» и т. Д.).
Одна вещь, которую я делаю при написании кода для управления пользовательским интерфейсом (больше на веб-странице, но то же самое относится) - спрашивать себя с каждой единицей кода (одна строка, условный, цикл и т. Д.).) зависит ли этот фрагмент кода от наличия пользовательского интерфейса. Если я пишу в текстовое поле, это зависит от пользовательского интерфейса, поэтому оно идет туда. Но если я рассчитываю результат, который пойдет в это текстовое поле, это, вероятно, бизнес-логика.
Другой подход (как ChrisW, намеченный во время ввода) заключается в том, чтобы сначала разработать логику в библиотеке классов, отличных от UI. Положите столько логики, сколько сможете (используйте свое суждение относительно того, что определяет «логику»), которая не зависит от библиотек на основе UI. Затем создайте пользовательский интерфейс, чтобы использовать эту логику. Существуют разные подходы к параллельной разработке этих двух частей, такие как завершение логической сборки за классами интерфейсов и просто кодирование фрагментов пользовательского интерфейса для этих интерфейсов (затем использование инъекции зависимостей для подключения классов сборки к интерфейсам) и т. Д.
Спасибо - я думаю, что это хорошая практическая отправная точка, чтобы помочь мне правильно подумать. – Andy