Os nomes dos pacotes devem ser singulares ou plurais?


227

Frequentemente, especialmente nas bibliotecas, os pacotes contêm classes organizadas em torno de um único conceito. Exemplos: xml, sql, user, config, db . Acho que todos sentimos que esses pacotes estão corretos no singular .

com.myproject. xml .Element
com.myproject. sql .Connection
com.myproject. usuário .User
com.myproject. usuário .UserFactory

No entanto, se eu tiver um pacote que realmente contenha uma coleção de implementações de um único tipo - como tarefas, regras, manipuladores, modelos etc. , qual é preferível?

com.myproject. tarefas .TakeOutGarbageTask
com.myproject. tarefas .DoTheDishesTask
com.myproject. tarefas .PaintTheHouseTask

ou

com.myproject. tarefa .TakeOutGarbageTask
com.myproject. tarefa .DoTheDishesTask
com.myproject. tarefa .PaintTheHouseTask


5
singular, assim como os nomes de tabela de banco de dados sempre devem ser singulares, mas por razões diferentes. Veja qualquer biblioteca padrão popular como Java ou Python, por exemplo.

@Jarrod Roberson: Por favor, poste sua resposta como resposta para que possamos votá-la corretamente.
S.Lott

@ Jarrod vai precisar de alguns exemplos, já que nas bibliotecas padrão a maioria das classes se enquadra na primeira categoria que listei.
1211 Nicole

@ Renesis Dê uma olhada na minha resposta atualizada.
Matthew Rodatus

@ Matthew - eu gosto. Você expressou o que eu suspeitava, mas não sabia ao certo como codificar.
1211 Nicole

Respostas:


293

Use o plural para pacotes com conteúdo homogêneo e o singular para pacotes com conteúdo heterogêneo.

Uma classe é semelhante a uma relação de banco de dados. Uma relação de banco de dados deve ser nomeada no singular, pois seus registros são considerados instâncias da relação. A função de uma relação é compor um registro complexo a partir de dados simples.

Um pacote, por outro lado, não é uma abstração de dados. Ajuda na organização do código e na resolução de conflitos de nomenclatura. Se um pacote é nomeado no singular, isso não significa que cada membro do pacote é uma instância do pacote; contém conceitos relacionados, mas heterogêneos. Se ele for nomeado no plural (como geralmente são ), esperaria que o pacote contenha conceitos homogêneos.

Por exemplo, um tipo deve ser nomeado em TaskCollectionvez de TasksCollection, pois é uma coleção que contém instâncias de a Task. Um pacote nomeado com.myproject.tasknão significa que cada classe contida é uma instância de uma tarefa. Pode haver um TaskHandler, um TaskFactory, etc. Um pacote chamado com.myproject.tasks, no entanto, deve conter diferentes tipos que são todas as tarefas: TakeOutGarbageTask, DoTheDishesTask, etc.


13
Para uma pergunta semelhante, consulte english.stackexchange.com/q/25713 . Uma categoria é análoga ao singular e um tipo é análogo ao plural.
Matthew Rodatus

4
O próprio link que você forneceu mostra uma exceção a esta regra. beansé plural, no entanto, java.beanscontém todas as classes de tipos relacionadas ao JavaBeans.
SkyDan

Boa resposta, mas não concordo com a lógica da relação de banco de dados. Os relacionamentos em um ERD são singulares porque estão mostrando relacionamentos entre entidades. As tabelas são uma implementação física das relações e mantêm várias linhas e, portanto, devem ter o IMO plural. A resposta para "o que há nesta tabela?" é "usuários" e não "usuário". É verdade que parece que a nomeação singular é mais comum no mundo corporativo (C #, Java) do que em comunidades como Ruby, Python, Javascript e PHP.
Ryeguy 21/05

4
O comentário do @ SkyDan aponta algo muito importante que está sendo totalmente ignorado aqui. Parece-me que a nomeação plural de "java.beans" foi realmente um erro, e deveria ter sido chamada de "java.bean", singular.
Vicky Chijwani

6
@VickyChijwani @SkyDan Como JavaBeans ™ é uma marca comercial, eles provavelmente queriam manter o nome como estão para se referir à própria tecnologia e, portanto, eles usaram java.beans.
28416 Hejazi

1

Provavelmente isso depende de um idioma específico. No .NET (C #), definitivamente deve ser um plural se for provável uma colisão de nomes do tipo namespace (o type name expected but namespace founderro). Eu lidei com isso, não é agradável e resulta em nomes de tipo superqualificados em todo o código. Exemplo .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.