2009-01-28 58 views
3

根据预定义的签名,我必须实现一组60个函数。它们必须是全局函数,而不是某些类的成员函数。当我实施它们时,我使用第三方提供的一组很好的课程。在全局函数或全局函数封装的类中执行

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

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

回答

4

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

这是关键。不,他们绝对不应该上课。类用于创建对象。在你的情况下,你可以将它们当作范围,用于数据和功能。但是,这是什么命名空间已经解决好:

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 ... 
    } 
} 

创建可只包含静态成员纯粹课是一个坏主意。

0

我认为“一流一责任”规则应该引导你到这里。这60个职能大概可以分成不同的职责,每个职位都值得一个班级。这也将为API的客户端提供更多的OO接口,而不受全局功能需求的限制。

+0

@On,你是在暗示60个方法的60个方法?正如前面的回应所建议的那样,这些函数需要被包装在一个名称空间中,而不是用类来疯狂。 – Jagannath 2010-01-03 10:00:30

+0

当然不是,但是有60个班,肯定会有一些不同的责任(可能在4到15之间)。 – 2010-01-03 18:43:30

2

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

如果是,执行它。

如果不是,不要浪费时间来实现它,不要浪费其他人强制测试它的时间,或者试图了解除了OOP外观之外,这个类的确切作用。

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方法,你可以做到这一点始终使用名称空间限定是指功能容易。