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