Deve auxiliares de classe ser usado no desenvolvimento de um novo código?

votos
10

Delphi 8 introduziu Classe auxiliares para efeitos de mapeamento do VCL / RTL para a hierarquia .NET objecto. Eles permitem injectar métodos para uma classe existente sem substituir a classe ou modificando o original. Versões posteriores do Delphi encontrado auxiliares de classe melhorou e eles foram portado para Win32.

Na ajuda ele diz que não deve ser visto como uma ferramenta de design para ser usado no desenvolvimento de um novo código.

Ajudantes de classe violar OOP tradicional, mas eu não acho que os torna uma coisa ruim. É este aviso garantido?

Deve auxiliares de classe ser usado no desenvolvimento de um novo código?

Você usá-los no desenvolvimento de um novo código?

Por que ou por que não?

Por comentários de Malcolm : Novo código significa desenvolvimento diário de aplicação, onde você tem algumas bibliotecas 3o partido, algum código existente e, em seguida, o código que você está escrevendo.

Publicado 10/12/2008 em 03:31
fonte usuário
Em outras línguas...                            


10 respostas

votos
15

Depende do que você entende por "novo código".

Eles não são realmente relevantes para as classes que você está recém-desenvolvimento, de modo que, nesse caso, não, eles provavelmente não deve ser usado.

Mas mesmo em um novo projeto, você ainda pode precisar modificar uma classe existente que você não pode mudar de outras maneiras (classe VCL, classe de terceiros, etc). Neste caso, com certeza, eu diria que ir em frente.

Eles não são maus em si mesmos. Como a maioria das outras coisas, você só precisa entender como eles funcionam e usá-los em um contexto apropriado.

Respondeu 10/12/2008 em 05:32
fonte usuário

votos
8

Antes de abraçar auxiliares de classe como uma nova ferramenta para o código de fantasia, eu acho que você tem que entender as limitações se inclui. Não só é possível para fornecer uma classe auxiliar para uma classe. Então, o que vai acontecer se você fornecer auxiliares de classe para suas classes, e suas classes deriva de uma classe comum que algum outro ter fornecido um auxiliar de classe para?

CodeGear introduz auxiliares de classe como 'um truque' para evitar que as coisas quebram, não como um recurso de design cool. Quando você cria código, projetá-lo sem auxiliares de classe. Eu sei que você pode. Ao lidar com o código que você pode controlar existente, use refatoração. Quando não há outro caminho, para chegar a auxiliares de classe.

Isso é minha opinião de qualquer maneira ...

Respondeu 10/12/2008 em 11:05
fonte usuário

votos
6

Microsoft baseado LINQ fortemente em torno de seus métodos de extensão. A essa luz deve utilizar Classe Helpers no novo código se isso melhora o seu código. Veja Quais são bons usos para auxiliares de classe? para alguns bons usos.

Respondeu 10/12/2008 em 08:02
fonte usuário

votos
3

Eu usá-los muito. Eu uso objetos remotos e os objetos não são criados pelo mecanismo de RO para que você não pode adicionar a eles sem descer com eles e, em seguida, outros pedaços de andar. Ajudantes de classe significa que eu posso tratá-los como qualquer outro objeto. e enquanto uma classe pode ter apenas um ajudante, você pode descer classes auxiliares de modo a obter o comportamento herdado.

Respondeu 10/12/2008 em 14:33
fonte usuário

votos
2

Talvez uma boa aproach você pode usar é (como eu usá-lo):

  1. Sempre dar preferência à herança mais auxiliares de classe, usá-los somente quando a herança não é uma opção.
  2. preferência aos ajudantes classe sobre métodos globais nuas .
  3. Se você vai precisar da funcionalidade extendend em mais de uma unidade, tente outra coisa ( como invólucros de classe ).

.net Extensões métodos são muito semelhantes e onde criou e apoiou para exatamente o mesmo motivo: Faça uma extensão das classes de base (em vez de um upgrade wich em Delphi.Net não era uma opção, a fim de tentar fazer Delphi tipo código nativo de "compatível" com código .Net - IMHO este era demasiado ambicioso)

De qualquer forma, ajudantes Delphi classe ainda são uma ferramenta bastante em algumas situações.

Respondeu 11/12/2008 em 01:52
fonte usuário

votos
2

Concordo com Vegar nisto: auxiliares de classe como uma ferramenta de emergência. Quando você sabe que eles são a única maneira de fazer as coisas no tempo previsto. Mais tarde, se houver tempo para isso, removê-los.

Eu uma vez esqueci uma coisa parametrização, e se auxiliares de classe não existia em Delphi 2006 que iria custar muito ENORME DE TEMPO ..... Com auxiliares de classe, ele levou 6 horas para fazer thigs funcionar direito. Mas, foi uma situação de emergência - auxiliares de classe é um recurso de linguagem obscura e criar dificuldades para novos desenvolvedores para seguir o fluxo do programa.

Respondeu 10/12/2008 em 16:08
fonte usuário

votos
2

Desculpe, não pode deixar de ser Capitão Óbvio por um momento: Se as Delphi pessoas internos próprios do Estado "que não deve ser visto como uma ferramenta de design para ser usado no desenvolvimento de um novo código", então, por definição, eles não devem ser usados. Eles estão lá para estender o VCL apenas para seus próprios propósitos. Quem mais vai lhe dar uma razão melhor do que as pessoas que escreveu isso?

Respondeu 10/12/2008 em 04:14
fonte usuário

votos
1

Eu encontrei este artigo muito interessante. Trata-se de C ++, mas as ideias principais são a linguagem independente. O ponto principal é que as rotinas globais são, por vezes preferível aos métodos, mesmo em um ambiente OOP. Deste ponto de vista, há menos necessidade de auxiliares de classe.

Respondeu 10/12/2008 em 09:14
fonte usuário

votos
1

Encontro-me a usá-los mais e mais como uma construção design.

Situações em que eu usá-los:

  • Em uma configuração cliente / servidor, estendo compartilhada-base aulas com auxiliares de classe para fornecer funcionalidade em servidor ou apenas do cliente.
  • Para complementar as classes VCL / RTL (e outros códigos de terceiros) com funções de ferramentas úteis.
  • Para contornar diferenças quando as aulas não compartilham a mesma árvore de herança (usando ajudantes torna possível ter têm genéricos contar e Itens propriedades, por exemplo).

Na verdade, eu desejo Delphi iria aceitar vários ajudantes para a mesma classe base - Eu mesmo entrou com um pedido para este se estou lembrando corretamente.

Respondeu 10/12/2008 em 07:45
fonte usuário

votos
1

Estes soar como métodos C # extensão. Eu diria que, enquanto os métodos de extensão como estes são úteis quando você não tem a capacidade de modificar uma classe que você precisa estender com a funcionalidade, eles são uma má maneira de projetar seu próprio código. Ao conceber o seu próprio código, você gostaria toda a funcionalidade a ser localizado no mesmo arquivo de código, tanto quanto possível, em vez de espalhados por diferentes classes. Eu diria que usá-los para o que eles foram destinados para - basicamente como decoradores para adicionar novas funcionalidades às classes fechadas - e não usá-los na concepção de seu próprio código.

Respondeu 10/12/2008 em 03:36
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more