Вы много пережевываете свою линию вопросов здесь. (Там где-то спрятан конкретный вопрос?)
С уровнями, я полагаю, вы имеете в виду физические границы, то есть приложение, сервер приложений / SOA / WCF, слой данных, который находится на сервере SOA, и базу данных где-то.
Проектирование на будущее может показаться хорошей идеей, но ОБЯЗАТЕЛЬНО убедитесь, что во всех этих слоях где-то в будущем будет необходимость. По сути, вам не нужен подход, основанный на WCF / SOA, если вы в какой-то момент не выставляете свое приложение через Интернет. Веб-интерфейс может решить эту проблему во многих случаях.
Я не говорю, что вам вообще не понадобятся эти слои, но вы можете и не захотеть. Если вы действительно, швы - ваш друг. Вы должны сделать «точки разреза», где вы можете определить свои границы. Я обычно использую шаблон репозитория для диверсификации методологий доступа к данным, а также использую простые объекты (POCO) и интерфейсы, которые сохраняются с помощью таких технологий, как NHibernate. Использование POCO также значительно облегчает передачу этих объектов по проводам на более позднем этапе, как в отдельности, так и в части сообщений.
Создание вызываемых сервисных интерфейсов может укрепить ваши границы. Когда вы будете готовы к перемещению между машинами / физическими границами, вы просто создаете свои границы в реализациях сервиса.