Вопрос о дизайне класса оболочки - PullRequest
0 голосов
/ 20 октября 2010

Я хочу обернуть часть библиотеки TinyXML в некоторые пользовательские классы в моем проекте, потому что мне нужны только некоторые ее функциональные возможности и я не хочу раскрывать все.

У меня проблема с тем, что моя функция XMLDocument::AddNode(...) в основном делает то же самое, для чего предназначен мой класс XMLNode.Я задавался вопросом, может ли кто-нибудь дать мне несколько советов по дизайну, как обернуть библиотеку TinyXML, чтобы я не нарушал инкапсуляцию и мои классы-оболочки не открывали библиотеку TinyXML для остальной части моего кода.* Кто-нибудь может дать мне несколько советов о том, как правильно обернуть это и показать только ту функциональность TinyXML, которую я хочу?

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Вы уже инкапсулировали TinyXml document - теперь вам просто нужно делегировать его туда, где вы хотите, чтобы показать только подмножество функций, которые он предоставляет.

Заменить это

void XMLDocument::AddNode(XMLNode& node)  // This function does over what XMLNode class is actually for... I just want to add the node to the XMLDocument
{
    std::string val = node.GetNodeName();
    TiXmlElement* el = new TiXmlElement(val.c_str());
    TiXmlText * txt = new TiXmlText(node.GetNodeValue().c_str());
    el->LinkEndChild(txt);
    document.LinkEndChild(el);
}

с этим

void XMLDocument::AddNode(XMLNode& node) 
{
    document.AddNode(node);
}

Это вполне законно, так как вы не хотите показывать полный TiXmlDocument клиентам вашего класса.Подумайте, как std :: queue и std :: stack действуют как адаптеры для нижележащих контейнеров.

0 голосов
/ 20 октября 2010

Это можно решить двумя способами.

  1. Извлечение его из XMLDocument
  2. Наличие объекта XMLDocument и переадресация вызова к нему.
...