2010-07-26 6 views
1

Я собираюсь добавить класс X, который будет использоваться моими тремя ранее разработанными классами (A, B и C).Должен ли я использовать API/ABC при разработке класса, используемого несколькими в C++?

Новый класс X будет содержать данные и функции для новых функций, а также предоставлять услуги классам, которые используют его для скрытия нижних слоев. Проблема в том, что A, B и C будут использовать класс X совершенно по-другому, то есть использовать разные функции.

Вопрос в том, должен ли я предоставить API (или абстрактный базовый класс в C++) для нового класса X или нет. Если я должен, должен ли этот API соответствовать классу X или классам A, B и C? Я где-то читал, что API иногда более тесно связан с этим вызывающим, что класс, который его реализует. Если я предоставляю один API для каждого вызывающего, API будет содержать только те функции, которые нужны конкретному вызывающему.

Или я должен просто создать обычный класс C++ и позволить вызывающим абонентам использовать подмножество публичных функций X в каждом из A, B и C, хотя они «технически» могут использовать их все? Функции класса X вряд ли будут меняться, и не нужно создавать аналогичный класс для X.

Если я не полностью потерял объектно-ориентированное программирование, одна из причин предоставления интерфейса/API для класса заключается в том, что код, который использует интерфейс/API, не нуждается в изменении, если вы добавляете другой подкласс, поскольку вызывающий объект работает с именем интерфейса и использует динамическую привязку для разрешения правильного типа подкласса.

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

Спасибо,

Tomas

ответ

1

Вы уверены, что все эти функции принадлежат одному и тому же классу X? Подумайте о разделении разной функциональности на разные классы: http://en.wikipedia.org/wiki/Low-Coupling_/_High-Cohesion_pattern

Но, не зная, какие функции X являются трудными для дальнейшего развития.

0

Если что-то вряд ли изменится, это, вероятно, не стоит дополнительных усилий.

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

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

  • Нет связанных вопросов^_^