Chyba rozumiem. Nie ma sensu tworzyć jednego interfejsu i nie ma tutaj znaczenia, że w solucji mam projekty, gdzie jeden korzystałby z implementacji dla DB (EF), a drugi z implementacji dla clienta API.
Owszem, w tym przypadku nie ma to sensu.
Interfejsy mogą służyć do wydzielania jakichś wspólnych zachowań, ale aby to miało sens, to te wspólne abstrakcje muszą należeć do jednej klasy abstrakcji, istnieć na jednym poziomie koncepcyjnym, w jednej warstwie. Gdybyś miał tylko aplikację mobilną, która może pobierać takie same dane albo z API albo bezpośrednio z bazy, to taki interfejs miałby sens. Gdybyś miał tylko API, które dostarcza takich danych ze swojej bazy albo z jakiegoś innego API, to taki interfejs miałby sens.
Ale w tej sytuacji, gdy mobilka czyta z API, a API z bazy, to są to dwa różne światy i próba łączenia ich w jeden niczego nie wnosi, bo i tak nigdy nie zastąpisz jednej implementacji drugą. Mam wrażenie, że cały problem wziął się stąd, że masz to wszystko w jednej solucji. Zazwyczaj oddziela się frontend od backendu,
Nabrałem chyba jakiegoś złego przeświadczenia, że jak wstrzykuje gdzieś zależność to powinno być to wstrzyknięte jako interfejs, rozumiem, że jest to złe myślenie?
Owszem, jest złe. Aczkolwiek mocno promowane w tutorialach, blogach i innych patologicznych miejscach. Ktoś kiedyś powiedział, że należy programować do abstrakcji, ktoś inny, że interfejsy to abstrakcje (co jest bzdurą totalną), no i w efekcie miliony programistów robią interfejs do każdej klasy, w 80-90% całkowicie bezużyteczny.
Rozumiem, że lepiej żeby powstała tutaj jakaś warstwa pośrednia i kolejny zestaw klas?
No tak jak wspomniałem, API i aplikacja mobilna, to są oddzielne warstwy fizyczne, trochę dziwne, że operują na tych samych klasach.
Po drugie, sytuacja, że kształt danych w bazie odpowiada dokładnie temu, co trafia do API jest wręcz niespotykana. W bazie zazwyczaj trzyma się jakieś dane relacyjne, a API operuje na bardziej płaskich strukturach. Prędzej czy później coś się zmieni i rozjedzie. A jak nie ma danych relacyjnych, to baza relacyjna wydaje się zbędna.