Pergunta

Quais são as coisas que eu deveria estar olhando para quando eu produzir um gráfico de dependência?

Ou, dito de outra maneira, quais são as características de um bom aspecto gráfico vs um mau?

Edit: O contexto aqui é a minha primeira olhada em meus assembléias em NDepend

.
Foi útil?

Solução

O maior problema que você pode manchar definitivamente é Dependências Cycles. A ferramenta NDepend propõe um interativo dependência Matrix e uma dependência Graph que vai ajudar a detectar dependência cyles . Disclaimer: Eu sou um dos desenvolvedores da ferramenta

enter descrição da imagem aqui

Observe que a matriz de dependência é muito mais do que adaptado gráfico para ciclos local. Uma vez que um ciclo de evitar a matriz a ser triangular.

As outras gamas de problemas são em relação ao seu estrutura de aplicação: Por exemplo, é normal que os usos de interface do usuário diretamente do DB? ou muito pior, a DB depende UI?

Você pode escrever regras de código mais consultas LINQ (CQLinq) para verificar se há proibido dependências. A verificação seguinte regra de código que tipos de interface do usuário não deve usar diretamente tipos DB:

// <Name>UI layer shouldn't use directly DB types</Name>
warnif count > 0

// UI layer is made of types in namespaces using a UI framework
let uiTypes = Application.Namespaces.UsingAny(Assemblies.WithNameIn("PresentationFramework", "System.Windows", "System.Windows.Forms", "System.Web")).ChildTypes()

// You can easily customize this line to define what are DB types.
let dbTypes = ThirdParty.Assemblies.WithNameIn("System.Data", "EntityFramework", "NHibernate").ChildTypes()
              // Ideally even DataSet and associated, usage should be forbidden from UI layer: 
              // http://stackoverflow.com/questions/1708690/is-list-better-than-dataset-for-ui-layer-in-asp-net
              .Except(ThirdParty.Types.WithNameIn("DataSet", "DataTable", "DataRow"))

from uiType in uiTypes.UsingAny(dbTypes)
let dbTypesUsed = dbTypes.Intersect(uiType.TypesUsed)
select new { uiType, dbTypesUsed }

Outras dicas

a gráfico de dependência de quê? Aulas? procedimentos armazenados?

ciclos são ruins ...

Se mudar um meio de dependência que você precisa para mudar um monte de outras pessoas, é ruim.
Mas sim, algum contexto poderia ajudar.

Eu não sabia o que mostra NDepend mas artefatos que tendem a entrar em muitas seções (em especial as secções não relacionados) de código tenderia a ser ruim (IMHO). Eu tenho pensado nisso como "Código Cancer".

Um orador em uma conferência NFJS mostrou-nos alguns gráficos de dependência ... Um cheiro que ele apontou foi a olhar para as coisas com relação a diferentes partes funcionais de sua base de código. Estes provável quebra de encapsulamento.

Também gostaria de olhar para a complexidade geral de cada secção .. aqueles com linhas em todo são suspeitos.

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