почитать про паттерны mvc, а лучше mvp.
прочитать про solid принципы. особенно про последний dip.
прочитать про tdd, особенно полезно посмотреть на примере как оно работает.
писать тестируемый код. переписывать это нормально для начала. иначе как понять, что архитектура не приемлема или неудачна. стараться разбивать программу на независимые компоненты. в итоге переписывать станет меньше.
из книг можно Мартин Р.С., Мартин М. - Принципы, паттерны и методики гибкой разработки на языке C# - 2011
из видео например
https://www.youtube.com/watch?v=lDdJYid8NpE&t=432s
из статей
https://habrahabr.ru/post/276593/