2012-08-06 1 views
3

Я работаю над проектом в .NET, и его часть должна связываться с устройством, подключенным через RS232 (com-порт) к компьютеру. Я получил API от производителя устройства, и он написан на C#.Должен ли я использовать внутренние классы API в .NET при создании класса Wrapper?

Я хочу написать библиотеку классов в C# и использовать ее в качестве оболочки этого API для того, чтобы все вызовы были централизованы здесь и использовали только один экземпляр основного класса API, поскольку он должен быть инициализирован только в первом вызов. (Я думаю, что я должен использовать Singleton)

API имеет внутренние классы и перечисления, а некоторые из его общедоступных методов запрашивают внутренний класс в качестве параметра.

Мое сомнение в том, должен ли я запрашивать у пользователей своей оболочки эти внутренние классы API в качестве параметров или не является хорошей практикой раскрывать внутренний класс API за пределами оболочки?

Также я сомневаюсь, что это хорошая идея написать эту оболочку, поскольку API также написан на C#, может быть, я откладываю свое время?

ответ

3

Это очень зависит от того, сколько времени/ресурсов вы собираетесь инвестировать в этот проект, или вы можете инвестировать в этот проект.

Совершенно хороший выбор будет полностью скрыть внутреннюю реализацию API от потребителя вашего класса-обертки. Таким образом, если вы приобретете новое устройство или новый драйвер для устройства (с слегка разных API), или совершенно новое устройство с совершенно другим API от разных производителей, вы снова залейте его в класса, скрывая от пользователя все детали «низкого уровня», что очень возможно, что он не заботится о них.

Но его может быть большим количеством работы, в зависимости от того, насколько велика или хорошо написана оригинал API производителя.

Надеюсь, это поможет.

+0

Спасибо Тиграну. Насколько я знаю, API не будет иметь изменений мэра из уже полученной версии. Например, у API есть метод SENDPOSITION (позиция GPSPosition), должен ли я попросить потребителя моей обертки отправить объект GPSPosition для моей функции, а затем я отправлю его функции API? или я должен скрывать этот внутренний класс? –

+0

@Frank_: Имо, лучше скрыть это, но следите за временем, которое вы потратите на это – Tigran

1


Использование обертки - отличная идея, вы на правильном пути. Обертка позволит повторное использование кода, и, как вы упомянули, вы можете создать синглтон, который будет управлять временем жизни объекта.

О внутренних классах: Это очень плохой API, если он предоставляет внутренние классы! Это означает, что вы не можете использовать эти методы, потому что вы не можете создавать экземпляры этих классов - и не будете потребителем вашей обертки.
Итак, если это действительно так, с этим API, вы должны обязательно скрыть эту ошибку, а не разоблачать ее.

Удачи вам!

+0

Спасибо Jony, я ошибся, когда сказал «внутренние классы», что я имел в виду, так это то, что они находятся внутри API (моя вина, извините). Эти классы являются общедоступными, и я могу их создать, чтобы они могли использоваться потребителем моей обертки.Имея это, должен ли я создавать экземпляры классов API внутри моей оболочки, используя параметры, которые мой потребитель отправил мне, или я должен разрешить им создавать экземпляр класса API и отправлять его в мою оболочку? Благодаря! –

+0

Мое мнение - взять полный контроль над обернутым API. Если вы разоблачаете все, вам не понадобится ваша обертка, и, что еще хуже, она будет использоваться по-разному (через вашу обертку и изнутри), что приведет к дублированию кода и менее обслуживаемому коду. Ограничьте интерфейс оболочки только тем, что вам нужно в вашем приложении, и выставляйте больше, если и когда это необходимо. –

Смежные вопросы