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

  1. A Cache classe que mantém um dicionário particular e permite o acesso diferente para objetos com base em algumas teclas específicas

  2. 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)

Foi útil?

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?

Não há uma maneira certa de fazer isso.

Fazer download alguns projetos de código aberto que utilizam tecnologias semelhantes ao seu projeto e levar suas idéias a partir delas.

Desculpe, eu perdi o C # tag. Exemplos de bons projetos .NET foram cobertas antes aqui e here .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top