Алекс, тебя не смущает классическая иерархия программистов Джун-Миддл-Синьор-Архитект?
Извини, но твой вопрос из серии "новобранец спрашивает, как научиться стратегическому мышлению уровня маршала".
Дорастешь до синьора - сам начнешь понимать. Пока - никак.
Для примера: "как организовать (правильно, быдлокод пишу и так) иерархию/структура классов - реализация чтения данных из разных источников (разные файлы, база и т.д.) " - ну, скажу я тебе, что надо либо организовать общий интерфейс и фабрику ридеров (вариант А), или же реализовать это в виде стратегий (вариант Б) - это сильно поможет?