これはXMLファイル構造に依存します。もし私がA/B/C /にアクセスできるなら... ...別に私のC++/boostコードはこのように見えます。
FunctionalityAのクラスA関連のすべてをリファクタリングする 、FunctionalityBのクラスB関連... FunctionalityProviderクラスは、システムの機能を設定するクラスです。 OneAndOnlyMethodは、プロバイダにすべての機能を問い合わせ、それらの機能を反復処理します。私は別々に/ B/Cにアクセスすることができなかった場合は
class XmlFunctionality
{
public:
virtual ~XmlFunctionality(){
}
virtual void loadFromConfig(XmlBasedConfig) = 0;
virtual bool isEnabled() const = 0;
virtual void execute() = 0;
protected:
XmlFunctionality(){
};
}
class FunctionalityA : public XmlFunctionality
{
public:
void loadFromConfig(XmlBasedConfig){
// load A information from xml
}
bool isEnabled() const{
return globalA.length()>0; // is A a global !?
}
void execute(){
// do you're a related stuff
}
}
class FunctionalityB : public XmlFunctionality
{
public:
void loadFromConfig(XmlBasedConfig){
// load B information from xml
}
bool isEnabled() const{
// when is b enabled ...
}
void execute(){
// do you're b related stuff
}
}
// Map your question to the functions -
class FunctionalityProvider
{
Functionality functionalityList;
public:
typedef std::vector<XmlFunctionality*> Functionality;
FunctionalityProvider() : functionalityList() {
functionalityList.push_back(new FunctionalityA);
functionalityList.push_back(new FunctionalityB);
functionalityList.push_back(...);
}
~FunctionalityProvider {
for_each(functionality.begin(), functionality.end(), delete_ptr());
}
Functionality functionality() const {
return functionalityList;
}
}
void TheOneAndOnlyMethod(XmlBasedConfig config, const FunctionalityProvider& provider) {
const FunctionalityProvider::Functionality functionality = provider.functionality();
for_each(
functionality.begin(),
functionality.end(),
bind(&XmlFunctionality::loadFromConfig, _1, config)); // or some other way of parsing the file
for_each(
functionality.begin(),
functionality.end(),
if_then(bind(&XmlFunctionality::isEnabled, _1), bind(&XmlFunctionality::execute, _1)));
}
は、私は、XMLファイルの内容に基づいて機能のリストをreturingパーサをしましょう。
グローバルはどのように必要ですか? –
グローバルの意味は何ですか?どこから来たのですか?パラメータ 'config'はどのように使われますか? –
paramは実際にはXML設定を表すDOMオブジェクトでした。グローバルなもの...私はそれらがグローバルである理由を知らない、私は元の著者に同じを尋ねるのが大好きだ。 –