tło
Mam projekt, który zależy od użycia określonego rodzaju urządzenia sprzętowego, podczas gdy tak naprawdę nie ma znaczenia, kto je tworzy, o ile robi to, czego potrzebuję. Biorąc to pod uwagę, nawet dwa urządzenia, które powinny robić to samo, będą się różnić, jeśli nie zostaną wyprodukowane przez tego samego producenta. Zastanawiam się więc, czy użyć interfejsu do oddzielenia aplikacji od konkretnej marki / modelu urządzenia, a zamiast tego interfejs powinien obejmować tylko funkcjonalność najwyższego poziomu. Oto, jak myślę, jak będzie wyglądać moja architektura:
- Zdefiniuj interfejs w jednym projekcie C #
IDevice
. - Posiadaj konkretny element w bibliotece zdefiniowanej w innym projekcie C #, który będzie używany do reprezentowania urządzenia.
- Niech konkretne urządzenie wdroży
IDevice
interfejs. IDevice
Interfejs może mieć metod, takich jakGetMeasurement
czySetRange
.- Spraw, aby aplikacja miała wiedzę na temat betonu, i przekaż ten beton do kodu aplikacji, który wykorzystuje (a nie implementuje )
IDevice
urządzenie.
Jestem całkiem pewien, że jest to właściwy sposób, aby to zrobić, ponieważ wtedy będę mógł zmienić, które urządzenie jest używane, bez wpływu na aplikację (co zdarza się czasami). Innymi słowy, nie będzie miało znaczenia, w jaki sposób implementacje GetMeasurement
lub SetRange
faktycznie działają przez beton (co może różnić się między producentami urządzenia).
Jedyne wątpliwości, jakie mam, to to, że teraz zarówno aplikacja, jak i konkretna klasa urządzenia zależą od biblioteki zawierającej IDevice
interfejs. Ale czy to zła rzecz?
Nie widzę też, w jaki sposób aplikacja nie musi wiedzieć o urządzeniu, chyba że urządzenie i IDevice
są w tej samej przestrzeni nazw.
Pytanie
Czy wydaje się to właściwym podejściem do implementacji interfejsu w celu oddzielenia zależności między moją aplikacją a urządzeniem, którego używa?