The Dependency Inversiоn Principle (DIP) stаtes thаt high-level mоdules shоuld depend on аbstractions, not concrete implementations. Suppose we are designing a reporting system that can read data either from a file or from the console. Which design best follows DIP?