2013-03-04 2 views
1

У меня есть компонент, который имеет API, который имеет около 10 функциональных возможностей. Я могу представить два способа его достижения:Определяющий размер связи

  1. Отдайте все эти функции как отдельные функции.

  2. Вывести только одну функцию, которая принимает XML в качестве входных данных. Основываясь на указанном параметре request_Type и параметрах, переданных в XML, я внутренне вызываю одну из соответствующих функций.

Q1. Будет ли второй дизайн более слабо связан, чем первый?

Я всегда читал о том, как я должен стараться, чтобы мои компоненты были слабо связанными, должен ли я действительно идти в этом направлении, чтобы достичь потери связи?

Q2. Какой из них был бы лучшим дизайном с точки зрения ООП и почему?


Edit:

Если я обнажая этот API через D-Bus для других, чтобы использовать, наберут проверки все равно будет рассмотреть, чтобы сравнить эти два подхода? Насколько я понимаю, проверка типов выполняется во время компиляции, но в случае, если эта функция открыта над некоторыми IPC, вопрос о проверке типа входит в картину?

ответ

3

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

что более связаны с этим вопросом является Single Принцип является ответственным (http://en.wikipedia.org/wiki/Single_responsibility_principle). Поскольку вы говорите о ООП, вы не должны раскрывать свои десятки функций в пределах одного класса, но разделять их между разными классами, каждый из которых несет отдельную ответственность. Определение хороших «обязанностей» и ролей требует определенной практики, но, следуя некоторым основным рекомендациям, вы сможете быстро начать работу. См. Are there any rules for OOP? для хорошей отправной точки.


Ответить на вопрос редактировать

Я не использовал D-Bus, так что это может быть совершенно неправильно. Но из краткого взгляда на tutorial я читал

Каждый объект поддерживает один или несколько интерфейсов. Подумайте о интерфейсе как названной группе методов и сигналов, так же, как в GLib или Qt или Java. Интерфейсы определяют тип экземпляра объекта.

DBus идентифицирует интерфейсы с простой строкой с именами, что-то , как org.freedesktop.Introspectable. Большинство привязок сопоставят эти имена непосредственно с соответствующим языком программирования , например, с интерфейсами Java или с чистыми виртуальными классами C++.

Насколько я понимаю, D-Bus имеет концепцию объектов differnt, которые предоставляют интерфейсы, состоящие из нескольких методов. Это означает (для меня), что мой ответ выше по-прежнему применяется. «D-Bus native» способ указать ваш API будет означать демонстрацию интерфейсов, и я не вижу причин, по которым хорошие рекомендации по разработке ООП не должны быть действительными. Как представляется, D-Bus сопоставляет их даже с конструкциями на родном языке, это даже более вероятно.

Конечно, никто не держит вас от создания собственного языка описания API в XML. Тем не менее, такие вещи, как злоупотребление базовыми методами. У вас должны быть веские причины для таких действий.

+0

хороший ответ. Наличие метода, который принимает (и возвращает) только какой-то объект черного ящика (например, структурированная строка), может казаться слабо связанным, но на самом деле вы просто отбрасываете все преимущества, которые скомпилированный код дает вам интерпретируемый код – PeteH

+0

I внесли изменения, можете ли вы ответить на часть, которую я попросил в редактировании? –

+0

спасибо за подсказку, я тоже отредактировал свой ответ. – Philipp

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