A sobrecarga do método do objective-c faz com que uma abordagem de design de 'muitos pequenos métodos' seja desaconselhável?

15
Eu geralmente prefiro usar métodos pequenos, como recomendado por, entre outros, Bob Martin em Código Limpo. Eu também li o suficiente sobre os internos do Objective-C para ter pelo menos alguma idéia sobre como funciona o despacho de mensagens ( série de discos é particularmente informativa sobre isso).

Apesar das preocupações com a otimização prematura, gostaria de saber se todo esse trabalho que o Objective-c faz com o objc_msgSend é, em termos práticos, significativo o suficiente para a abordagem 'muitos pequenos métodos' ser desaconselhável para projetos do Objective-C.

As descobertas empíricas são particularmente bem-vindas (talvez eu mesmo faça um teste). A experiência de qualquer pessoa que tenha escrito grandes projetos de objetivo-c também seria ótima.

Esclarecimento

O tom geral da pergunta é intencional. Eu não estou perguntando sobre o ajuste de desempenho de aplicativos específicos (é por isso que eu pergunto aqui, em vez de SO), mas mais sobre se as características de linguagem do Objective-C desencorajar uma certa abordagem de design. Eu observei que grande parte do código que eu vi da Apple, e outras partes (no github etc) tendem para grandes métodos (e classes), e eu estou querendo saber se isso é um preconceito que se insinuou por causa da linguagem em si. É claro que eu posso ter lido o código errado, ou podem ser fatores culturais, e não técnicos, que levaram à tendência, se existir.

(Por que vale a pena, atualmente estou escrevendo Objective-C, e estou usando pequenos métodos)

Pedido adicional

Concordo com as duas respostas que foram dadas. Uma outra coisa que eu gostaria é que alguém me aponte para uma base de código Objective-C (esperançosamente substancial) de fonte aberta (ou de outra forma visível) que usa métodos curtos (e classes pequenas). Eu ainda não vi nada em Objective-C para comparar com (por exemplo) a fonte de fitness .

    
por Cris 25.10.2011 / 23:08
fonte

2 respostas

4

Eu realmente não sei se a sobrecarga é insignificante ou não. Mas, eu preferiria projetar um sistema para ser facilmente compreensível e sustentável primeiro , e isso normalmente significa métodos e classes pequenos e focados. Isso também ajudará no ajuste de código subseqüente (só porque o código é mais fácil de manter). Além disso, é importante definir o perfil do código para encontrar afunilamentos reais, que podem nem estar relacionados à sobrecarga da chamada de método. Se você fizer qualquer operação fora do processo (por exemplo, chamadas para banco de dados, rede, sistema de arquivos), elas tendem a dominar o tempo de execução do programa de qualquer maneira.

Mas, como sempre, sua milhagem pode variar ...

    
por 27.10.2011 / 17:24
fonte
2

A grande maioria do código não será de desempenho crítico em qualquer qualquer aplicação, por isso, mesmo se a sobrecarga do método fosse significativa em comparação com outras línguas, a abordagem ideal seria ainda ter muitos pequenos métodos na maioria dos lugares e em linha apenas aqueles que o perfil mostrou ser crítico para o desempenho.

Claro, existem muitas pessoas que não sabem como otimizar corretamente, e algumas que podem saber sobre a sobrecarga do método e se envolver em ações de otimização prematura global, mas eu não acredito que o grupo seja grande o suficiente para ter um impacto significativo no ecossistema Objective-C.

Grandes métodos e classes são muito mais prováveis de serem o trabalho de um grande grupo de pessoas que não sabem ou se importam com profilers, overhead de método ou design adequado, e quem tenderá a produzir Big Balls of Mud em qualquer idioma. E sim, algumas dessas pessoas trabalham em codebases de alto perfil em grandes empresas de software.

    
por 27.10.2011 / 22:40
fonte