Onde colocar métodos compartilhados comuns

9

Eu tenho um monte de métodos que são comumente usados ​​em todos os lugares. No momento, o codefile é chamado globals, para representar o fato de que eles são ... de fato ... globais.

No entanto, eu não gosto disso.

Quero agrupá-los em uma classe e passar uma interface. Vou fazer apenas uma instância, mas não estou caindo na armadilha singleton aqui.

Primeiro de tudo, como devo nomear a classe. Quero evitar o nome global porque receio que os mantenedores tenham uma idéia errada.

Além disso, como devo considerar dividir esse conjunto de métodos para que o comportamento possa mudar e se adaptar?

O conjunto de métodos contém coisas como:

  • Tabelas de conversão
  • Interação da área de transferência
  • Gerenciando fontes construídas
  • Métodos comuns de desenho
  • Fornecendo uma interface com acesso a recursos frequentemente usados
Lee Louviere
fonte
São métodos puros do Util que não salvam o estado ou salvam o estado?
TheLQ
+1 por não cair na armadilha singleton.
Caleb Caleb
@TheLQ Eles não necessariamente salvam o estado, mas retêm dados const (como gráficos de conversão) por conveniência.
9789 Lee Augusta

Respostas:

4

O espaço para nome pode ser [application].Common.Shared

As classes podem ser nomeadas:

ConversionLookup
ClipboardCommunication
FontManager
DrawingUtility

Eu terminaria as aulas porque parece que eles fazem coisas diferentes.

Jon Raynor
fonte
1

Se você vai fazer uma instância, você tem praticamente um singleton. Além disso, o que as pessoas normalmente se refeririam se falassem sobre uma armadilha de singleton é que os singletons são globais, e é melhor que a maioria das classes não seja global. Então você também pode ter um singleton. Se você pode razoavelmente passar uma interface para objetos que podem querer chamá-la, ela não é realmente global.

Além disso, colocar tudo isso em um só saco de métodos globais dificulta a mudança e a adaptação do comportamento, pois não apenas cada alteração em um método exige uma nova subclasse, mas cada combinação de alterações precisaria de sua própria subclasse.

Eu recomendaria ter singletons para cada um que seja verdadeiramente global (acreditarei que todos são) e algum tipo de registro ou fábrica que fornece uma instância (o que significa que você pode implementar como singleton ou não, pois a interface será não faça promessas). Eu os nomearia com base no que eles fazem da perspectiva do interlocutor.

psr
fonte
1

Normalmente, eu coloco esses tipos de coisas em seus próprios nomes de assembly, como "foo.Common" em espaços para nome como "foo.Common.Collections" ou "foo.common.UI" etc. etc., então, posso referenciar o assembly em qualquer projeto Eu preciso deles.

Muad'Dib
fonte