문제

종속성 그래프를 생성 할 때 내가 찾아야 할 것은 무엇입니까?

아니면 다른 방법으로 말하면, 좋은 그래프와 나쁜 그래프의 특성은 무엇입니까?

편집 : 여기서 맥락은 ndepend의 내 어셈블리를 처음 보는 것입니다.

도움이 되었습니까?

해결책

당신이 발견 할 수있는 가장 큰 문제는 분명히 종속성주기입니다. 도구 ndepend는 대화식을 제안합니다 종속성 매트릭스 그리고 a 종속성 그래프 그것은 발견하는 데 도움이 될 것입니다 의존성 cyles. 면책 조항 : 저는 도구의 개발자 중 하나입니다.

enter image description here

의존성 매트릭스는 스팟 사이클에 대한 그래프보다 훨씬 더 적응되어 있습니다. 사이클은 행렬이 삼각형이되기 때문에.

다른 범위의 문제는 응용 프로그램 구조와 관련이 있습니다. 예를 들어 UI가 DB를 직접 사용하는 것이 정상입니까? 아니면 DB는 UI에 의존합니까?

당신은 쓸 수 있습니다 LINQ 쿼리 (CQLINQ)에 대한 코드 규칙 금지 된 종속성을 확인합니다. 다음 코드 규칙은 UI 유형이 직접 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 }

다른 팁

의존성 그래프? 클래스? 저장된 절차?

사이클은 나쁘다 ...

하나의 종속성을 변경한다는 것이 다른 많은 것을 바꿔야한다는 것을 의미한다면, 그것은 나쁘다.
그러나 예, 어떤 맥락이 도움이 될 수 있습니다.

나는 ndepend가 무엇을 보여주는지 알지 못하지만 코드의 많은 섹션 (특히 관련없는 섹션)에 들어가는 아티팩트는 나쁜 경향이 있습니다 (IMHO). 나는 그것을 "암 코드"라고 생각했습니다.

NFJS 회의의 연사는 우리에게 몇 가지 의존성 그래프를 보여주었습니다. 이들은 캡슐화가 될 가능성이 높습니다.

또한 각 섹션의 일반적인 복잡성을 살펴 보겠습니다. 모든 줄이있는 사람은 용의자입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top