全球功能的实现,或者在包裹类全球功能
-
20-08-2019 - |
题
我必须实现一组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 ...
}
}
创建可只包括静态成员纯粹类是一个好主意。
其他提示
做你的代码的用户真的需要这种大课?
如果是的,实现它。
如果没有,不要浪费实现它自己的时间,不要浪费别人授权测试或试图理解这是什么类超出了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
方法,你可以很容易地做到这一点。
我觉得“一类的一个责任”的规则应该在这里指导你。 60个功能大概可以分为不同的职责,并且每个那些值得一类。这也给了更OO接口是不被需要的全球职能限制API的客户。