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
IDeviceinterfejs. IDeviceInterfejs może mieć metod, takich jakGetMeasurementczySetRange.- Spraw, aby aplikacja miała wiedzę na temat betonu, i przekaż ten beton do kodu aplikacji, który wykorzystuje (a nie implementuje )
IDeviceurzą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 GetMeasurementlub SetRangefaktycznie 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 IDeviceinterfejs. 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 IDevicesą 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?