在全局函数或全局函数封装的类中执行
根据预定义的签名,我必须实现一组60个函数。它们必须是全局函数,而不是某些类的成员函数。当我实施它们时,我使用第三方提供的一组很好的课程。在全局函数或全局函数封装的类中执行
我对大多数函数的实现很短,大概有5-10行,主要处理对第三方类的不同访问。对于一些更复杂的函数,我创建了几个处理所有复杂东西的新类,并将它们用于函数中。所有的状态信息都存储在我的和第三方的类的静态成员中,所以我不必创建全局变量。
问题:如果我用60个成员函数实现一个大类,并且在那里执行所有的实现(现在在全局函数中)会更好吗?而且我必须写的每个函数都会调用该类中相应的成员函数。
所有的状态信息都存储在我的和第三方的类的静态成员中,所以我不必创建全局变量。
这是关键。不,他们绝对不应该上课。类用于创建对象。在你的情况下,你可以将它们当作范围,用于数据和功能。但是,这是什么命名空间已经解决好:
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 ...
}
}
创建可只包含静态成员纯粹课是一个坏主意。
我认为“一流一责任”规则应该引导你到这里。这60个职能大概可以分成不同的职责,每个职位都值得一个班级。这也将为API的客户端提供更多的OO接口,而不受全局功能需求的限制。
你的代码的用户真的需要这个大班吗?
如果是,执行它。
如果不是,不要浪费时间来实现它,不要浪费其他人强制测试它的时间,或者试图了解除了OOP外观之外,这个类的确切作用。
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
方法,你可以做到这一点始终使用名称空间限定是指功能容易。
@On,你是在暗示60个方法的60个方法?正如前面的回应所建议的那样,这些函数需要被包装在一个名称空间中,而不是用类来疯狂。 – Jagannath 2010-01-03 10:00:30
当然不是,但是有60个班,肯定会有一些不同的责任(可能在4到15之间)。 – 2010-01-03 18:43:30