Ну, зря тебе практика это подсказывает. Обычно в конкретном продукте это делается ровно одним способом. Иногда - оптимальным для продукта, иногда - уже нет. Иногда сначала одним, потом другим, так как интерфейсы одинаковые, а разные реализации и можно незаметно перключиться.