Classe bucketing. .
-
10-07-2019 - |
Pergunta
Ok, então eu tenho tentado colocar todos uma de minhas aulas em alguma pasta raiz, ou:
UI
BusinessLogic
DataAccess
BusinessObjects
Interfaces
eu tenho um pouco mais onde eu não consigo balde muito bem, então eu estou procurando sugestões
-
A Cache classe que mantém um dicionário particular e permite o acesso diferente para objetos com base em algumas teclas específicas
-
aulas Arg Evento?
Além disso, no âmbito de um projeto que eu agora começar a ter subsistemas que têm tudo (acesso a dados, objetos de negócios, busiensslogic) 3. Como eu deveria quebrar a estrutura de pastas?
A.
ProjectX
--Subsystem1
---- BusinessObjects
---- DataAccess
---- BusinessObjects
--Subsystem2
---- BusinessObjects
---- DataAccess
---- BusinessObjects
ou
ProjectX
--BusienssLogic
---- Subsystem1BL
---- Subsystem2BL
--DataAccess
---- Subsystem1DA
---- Subsystem2DA
--BusinessObjects
---- Subsystem1BO
---- Subsystem2BO
ou
ProjectX
--BusinessLogic
--DataAccess
--BusinessObjects
(Sem subdiretórios para cada subsistema funcional)
Solução
Eu tento alinhar meus nomes de montagem com seus namespaces, e use-se o .NET Framework como uma diretriz. Acredito firmemente que trabalhar com uma estrutura de namespace que as unidades de uma estrutura de pastas faz para uma base de código muito mais sustentável.
Por exemplo, eu tenho um provedor de cache que faz parte do quadro global de desenvolvedores que usamos. Ele vive em um espaço de nomes de algo semelhante a:
[Empresa] .Core.Data.Caching
Eu tenho outros dados funcionalidades relacionadas que também recaia logicamente debaixo do recurso de dados, de modo caching tem irmãos como adaptadores, conversores e geradores. Então, vamos supor que temos os seguintes namespaces:
[Empresa] .Core.Data.Adapters
[Empresa] .Core.Data.Converters
[Empresa] .Core.Data.Caching
[Empresa] .Core.Data.Generators
Estes namespaces relacionados viver em uma montagem chamada [da empresa] .Core.Data, que também é o nome do projeto. Encontrar coisas na solução torna-se muito simples seguindo esta estrutura. Falando de estrutura, agora vamos voltar à forma como eles são armazenados no disco.
O nome do projeto é o nome da pasta raiz. Isso pressupõe minha pasta de controle de origem, que é "C: Control \ Source" na minha máquina local:
C: \ Source Control \ Core [Empresa] .Core.Data \
C: \ Source Control \ Core [Empresa] .Core.Data \ Adaptadores
C: \ Source Control \ Core [Empresa] .Core.Data \ Caching
C: \ Source Control \ Core [Empresa] .Core.Data \ Conversores
C: \ Source Control \ Core [Empresa] .Core.Data \ Geradores
Assim, como uma hierarquia, parece algo como:
[solução]
- [Empresa] .Core.Data
---- [Adaptadores]
------ (arquivos Adaptadores)
---- [Cache]
------ (arquivos de cache)
---- [conversores]
------ (arquivos conversores)
Eu coloquei todos os projetos no mesmo nível, e variam sub-namespaces com pastas. Desta forma, os namespaces e as estruturas físicas são fáceis de conciliar. A parte difícil é encontrar o equilíbrio. Você não quer ter um grande número de conjuntos menores, então eu normalmente irá agrupá-los em um nível superior, e, eventualmente, refatorar quando ou ele está tendendo a crescer muito grande, ou se sub-namespaces mudar com mais freqüência do que outras partes .
Eu tenho feito isso há anos, e é muito confortável, não só para mim, mas para meus desenvolvedores usar.
Quanto à sua pergunta EventArgs, estou de acordo com o consenso de que eu normalmente faço uma classe por arquivo, mas fará com que a exceção para colocar uma classe EventArgs com outra classe, se for o uso singular. Para multiuso, eu colocá-los no ponto lógico mais alto da montagem, permitindo que a estrutura namespace para ligar o meu escopo.
Outras dicas
Eu normalmente gosto de furar a 1 classe, 1 regra arquivo, mas quando se trata de EventArgs, eu realmente gosto de declará-las no mesmo arquivo que eu definir o delegado ou evento. A menos, os argumentos são usados ??por mais de uma hierarquia de classes, que não tende a acontecer comigo muitas vezes.
Como para o cache, gostaria de colocar na pasta das classes em que ele suporta.
Por mais que eu como boa organização, pode-se chegar muito anal com ele.
Isto é principalmente gosto pessoal.
Concordo com o que Brian Genisio disse sobre onde colocar as classes EventArg etc .: se você só usá-los uma vez, colocá-los no mesmo arquivo onde você usá-los. Para as classes gerais / arquivos, eu sempre tenho uma pasta 'Geral' (! Como conveniente; -))
No que diz respeito a estrutura de pastas: Eu iria com o segundo, que um é de 3 camadas e mantém os subsistemas separados. Win-Win!
Eu só quero adicionar um comentário sobre os nomes. Eu sinto as ligações do negócio palavra para uso indevido. Fizemos isso, e agora não sabemos do que se trata: a lógica de domínio ou camada de serviço. Gostaria de sugerir nomes como Domínio. Domain.Impl (interfaces para separar Impl) e, em seguida, Serviços ... e talvez Persistence se você estiver usando ORM ... ele pode ser diferente se o seu usando abordagem diferente, mas para ser honesto, estou confuso sobre nomes BusinessLogic, DataAccess e BusinessObjects. Eu não entendo o que é o quê. BusinessObjects deve conter lógica de negócios, lógica? Ou são apenas DTOs? Então por que eles estão em um projeto separado de DataAccess?