순환 참조가 발생하지 않을 때 더 좋은 디자인이 있습니까? 그것은 전혀 문제입니까? 클래스 :클래스/데이터베이스 순환 참조 (C#, Enitity Framework Code First)
public class Stat
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Quantity> Quantities { get; set; }
public List<Hit> Hits { get; set; }
}
public class Hit
{
public int Id { get; set; }
public DateTime Date { get; set; }
public string Comment { get; set; }
public virtual Stat Stat { get; set; }
public List<HitComponent> HitComponents { get; set; }
}
public class HitComponent
{
public int Id { get; set; }
public float Amount { get; set; }
public virtual Hit Hit { get; set; }
public virtual Quantity Quantity { get; set; }
}
public class Quantity
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Stat Stat { get; set; }
public virtual Unit Unit { get; set; }
public List<HitComponent> HitComponents { get; set; }
}
public class Unit
{
public int Id { get; set; }
public string Name { get; set; }
public string Abbreviation { get; set; }
public List<Quantity> Quantities { get; set; }
}
스탯 예를 들어, 무언가의 통계 역도와 같은 훈련이다. 수량은 숫자로 측정 할 수 있습니다. 예를 들어 사용 된 바벨 (예 : kg 단위 - 단위는 Unit 클래스에 저장 됨) 또는 반복 횟수와 같은 수입니다. 이 경우 Stat (체중 인식)에는 두 개의 수량 (체중, 담당자)이 있습니다. 히트 (hit)는 스탯 (Stat)의 한 이벤트입니다 (한 번 수행 된 역도 훈련). HitComponent는 Hit에 속하며 하나의 Quantity를 포함합니다. 모든 히트에는 히트의 스탯에 포함 된 수량만큼의 히트 컴포넌트가 포함되어야합니다. (예를 들어, 모든 "역도"Stat의 Hit에는 두 개의 HitComponents가 포함되어야합니다. 하나는 "weight"Quantity이고, 하나는 "reps"Quantity입니다.이 전제 조건이 문제를 일으킬 수 있습니다 ...)
위에 표시된 디자인을 사용하고 너무 많은 문제가 없었습니다. 원형 참조가 발생하여 일부 클래스를 Json 문자열로 serialize하려는 경우 순환 참조와 약간 어색했습니다.
첫 번째 질문은이 디자인에 문제가 전혀 없다는 것입니다. 내가 많이 봤 거든이 순환 참조에 대한 명확하고 정의 된 대답을 찾지 못했습니다 (일부는 그것이 원형 참조가 아니기 때문에 실제 원형 참조가 아니라고 말합니다. 다른 사람들은이 해결책이 매우 문제가 있다고 말합니다) ? 다른 질문은 누군가가 더 나은 디자인을 제안 할 수 있다는 것입니다.
좋은 솔루션을 적중 제거 나를 위해 작동합니다. 그러나 순환 참조 (또는 종속성 - 차이점은 무엇입니까?)에 대해 아직도 조금 혼란 스럽습니다. 필자는 Stat에 예를 들어 3 개의 Quantities가 있고 하나의 HitComponent가 하나의 Quantity에 삽입되면 다른 2 개의 Quantities에는 반드시 1-1의 HitComponent가 있어야한다는 전제 조건이 있습니다. 이 전제 조건이 클래스/데이터베이스 테이블 디자인에 나타나는 것이 좋습니다. 또는 프로그램 논리에서이 규칙을 잘 관리하고 원형 참조가없는보다 깨끗한 디자인을 갖는 것이 좋습니다. 통계와 조회수 사이의 참조를 삭제 하시겠습니까? – Csati