Фон
У меня есть проект, который зависит от использования определенного типа аппаратного устройства, хотя на самом деле не имеет значения, кто делает это аппаратное устройство, если оно делает то, что мне нужно. При этом даже два устройства, которые должны делать одно и то же, будут иметь различия, если они не сделаны одним и тем же производителем. Поэтому я думаю использовать интерфейс, чтобы отделить приложение от конкретной марки / модели используемого устройства, и вместо этого иметь интерфейс, охватывающий только функциональность самого высокого уровня. Вот как я думаю, что моя архитектура будет выглядеть так:
- Определите интерфейс в одном проекте C #
IDevice. - Имейте конкретику в библиотеке, определенной в другом проекте C #, который будет использоваться для представления устройства.
- Попросите конкретное устройство реализовать
IDeviceинтерфейс. IDeviceИнтерфейс может иметь такие методы , какGetMeasurementилиSetRange.- Заставьте приложение иметь знания о бетоне и передайте бетон к коду приложения, которое использует (а не реализует )
IDeviceустройство.
Я уверен, что это правильный путь, потому что тогда я смогу изменить, какое устройство используется, не влияя на приложение (что иногда случается). Другими словами, не имеет значения, как реализации GetMeasurementили SetRangeфактически работают через бетон (как могут отличаться у производителей устройства).
Единственное сомнение, на мой взгляд, заключается в том, что теперь и приложение, и конкретный класс устройства зависят от библиотеки, содержащей IDeviceинтерфейс. Но разве это плохо?
Я также не вижу, как приложению не нужно будет знать об устройстве, если оно не IDeviceнаходится в одном пространстве имен.
Вопрос
Кажется ли это правильным подходом для реализации интерфейса, позволяющего отделить зависимость между моим приложением и устройством, которое оно использует?