Pergunta

Eu tenho que implementar um conjunto de 60 funções, de acordo com o predefinidos assinaturas.Eles devem ser funções globais, e não uma classe de funções de membro.Quando eu implementá-las, eu uso um conjunto de bem feito classes fornecidas pela 3ª festa.

Minha implementação da maioria das funções é bastante curto, cerca de 5 a 10 linhas, e lida principalmente com diferentes acessos para que terceiros 3ª classes.Para alguns mais complicadas funções criei um par de novas classes que lidar com todas as coisas complicadas, e eu usá-los nas funções também.Todas as informações de estado é armazenado em estática membros do meu partido e 3 de aulas, então eu não tenho para criar variáveis globais.

Pergunta:Seria melhor se eu implementar uma grande classe com mais de 60 funções do membro, e fazer tudo de implementação (que está agora em funções globais) lá?E cada uma das funções que eu tenho para escrever, vou apenas chamar a correspondente função de membro da classe.

Foi útil?

Solução

Todas as informações de estado é armazenado em estática membros do meu partido e 3 de aulas, então eu não tenho para criar variáveis globais.

Que é a keypoint.Não, definitivamente não deve ser colocado em classes.As aulas são feitas, para serem usadas para a criação de objetos.Na sua situação, você poderia usá-los apenas como escopo, para os dados e funções.Mas isto é o que espaços de nomes já resolver melhor:

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

A criação de classes que são compostos exclusivamente só de membros estáticos é uma má idéia.

Outras dicas

Faça o que os usuários do seu código realmente precisa esta grande classe?

Se sim, implementá-lo.

Se não, não perca seu tempo em implementá-lo e não perder o tempo dos outros com mandato para testá-lo ou tentar entender qual é exatamente o papel desta classe, além da OOP olhar.

litb é provavelmente correto.A única razão que você consideraria mesmo envolvendo uma class torno de um grupo de funções livres é, se você precisar anexar alguns de seus próprios dados para uso em seus invólucros.A única coisa que vem na minha cabeça é se precisa de um identificador para um arquivo de log ou algo semelhante no wrappers.

Em uma nota relacionada, lutar contra a tentação de using namespace stuff;!Sempre consulte a funções utilizando o espaço de nomes de qualificação:

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

em vez de:

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

A vantagem é que, se você precisar converter o namespace para uma classe cheia de static métodos, você pode fazê-lo facilmente.

Eu acho que "uma classe de uma responsabilidade" regra deve guiá-lo aqui.60 funções que, provavelmente, podem ser divididas em diferentes responsabilidades, e cada uma delas merece uma classe.Isso também irá dar mais OO interface para os clientes da API que não são limitados pela necessidade de funções globais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top