In sostanza si tratta di strutturare il tuo progetto in moduli ben definiti, ognuno dei quali implementa una determinata funzionalità della tua applicazione ed è "a sè stante", nel senso che potrebbe essere preso e portato dentro un'altra applicazione per fornire la medesima funzionalità. Scrivere codice riutilizzabile significa sviluppare vari moduli che vengono poi fatti interagire. Questo implica ovviamente che ogni modulo deve fare esclusivamente ciò che gli compete (ad esempio, il modulo di interfacciamento con il file - sensori, il modulo di gestione delle diverse utenze devono occuparsi solamente di quello). L'interazione tra questi e con l'utente è realizzata dal controllore e dall'interfaccia del programma.
Inscatolare le varie funzionalità in blocchi componibili rende il programma estendibile e riutilizzabile, infatti se un giorno volessi aggiungere una funzionalità, lo potresti fare tranquillamente con un nuovo modulo. Stessa cosa se volessi modificare l'implementazione di una funzionalità esistente, ti basterebbe modificare il codice all'interno di quel modulo e non altrove.
Per la guida purtroppo non ne conosco, non ho mai programmato in C#. Spero di essere stato comprensibile sul resto.