Посмотрите на первое сообщение в блоге из серии, которую я недавно начал. Он охватывает только это (n-уровневая архитектура), аналогичный человек из SO задал очень похожий вопрос, вдохновив тем самым серию блогов .
Пост выше (он также включает в себя пример кода) показывает, как сделать это без интерфейсов, но интерфейсы делают вещи намного более гибкими и управляемыми в будущем. Итак, чтобы ответить на ваши вопросы:
1 & 2. Интерфейсы не требуются. Вы можете использовать 2-уровневую архитектуру.
3. Если вы выберете 2-уровневый, то да, в противном случае, если вы собираетесь использовать 3-уровневое решение, тогда интерфейсы в значительной степени необходимы.
SO сообщение, которое вдохновило его:
Реализация метода Save для моего объекта
Обратите внимание, что мой SO ответ на этот пост никогда не обновлялся, потому что я помог джентльменам по скайпу и сделал для него пример специализированного решения.