3

根据预定义的签名,我必须实现一组 60 个函数。它们必须是全局函数,而不是某些类的成员函数。当我实现它们时,我使用了一组由第 3 方提供的做得很好的类。

我对大多数功能的实现都很短,大约 5-10 行,主要处理对 3rd 方类的不同访问。对于一些更复杂的函数,我创建了几个新类来处理所有复杂的东西,我也在函数中使用它们。所有状态信息都存储在我和第 3 方类的静态成员中,因此我不必创建全局变量。

问题:如果我实现一个有 60 个成员函数的大类,并在那里完成所有实现(现在在全局函数中)会更好吗?我必须编写的每个函数都只会调用类中相应的成员函数。

4

4 回答 4

4

所有状态信息都存储在我和第 3 方类的静态成员中,因此我不必创建全局变量。

这是关键点。不,他们绝对不应该上课。类用于创建对象。在您的情况下,您会将它们用作数据和函数的范围。但这是命名空间已经更好地解决的问题:

namespace stuff {
    ... 60 functions ...
    namespace baz {
        ... if you want, you can have nested namespaces, to ...
        ... categorize the functions ...
    }

    namespace data {
        ... you can put data into an extra namespace if you want ...
    }
}

创建仅由静态成员组成的类是一个坏主意。

于 2009-01-28T11:54:48.180 回答
2

你的代码的用户真的需要这个大类吗?

如果是,请实施。

如果不是,不要浪费你的时间来实现它,也不要浪费其他人的时间来测试它或试图理解这个类在 OOP 外观之外的确切作用。

于 2009-01-28T11:23:04.640 回答
1

litb可能是正确的。class您甚至会考虑包装一堆免费函数的唯一原因是您是否需要附加一些自己的数据以在包装器中使用。唯一突然出现在我脑海中的是是否需要日志文件的句柄或包装器中的类似内容。

在相关的说明中,与 ! 的诱惑作斗争using namespace stuff;!始终使用命名空间限定来引用函数:

#include <stuff.h>
void some_function() {
    stuff::function_wrapper();
}

代替:

#include <stuff.h>
using namespace stuff;
void some_function() {
    function_wrapper();
}

好处是,如果您需要将 转换namespace为一个充满static方法的类,您可以轻松完成。

于 2009-01-28T14:38:27.227 回答
0

我认为“一类一责任”的规则应该在这里指导你。这 60 个函数可能可以划分为不同的职责,并且每个职责都值得一个类。这也将为不受全局函数需求限制的 API 客户端提供更多的 OO 接口。

于 2009-01-28T11:12:51.977 回答