기타 코드 찾기 응용 프로그램을 구축 중입니다. fretboard를 표현하기 위해 다차원 배열을 사용합니다. 배열의 각 요소는 문자열 속성 'Note'가있는 FretSpace 구조체로 표현됩니다. fretboard를 통해 노트 속성을 초기화하기 위해, fretboard와 함께 작업 할 기타 문자열의 세부 사항을 전달합니다. 이 작업은 GuitarTuner 클래스에서 수행됩니다. 다음은 FretSpace 클래스입니다. -연결 if 문 패턴
public struct FretSpace : IPlottable, IResourceConsumer
{
public string Note { get; set; }
public int XPos { get; set; }
public int YPos { get; set; }
public string ResourceName { get; set; }
public override string ToString()
{
return string.Format("[{0}] Note:{1} XPos:{2} YPos{3} ResourceName:{4}",
GetType().Name, Note, XPos, YPos, ResourceName);
}
}
기타 튜너 클래스는 한 번에 한 문자열 씩 조정합니다. 이 경우, 튜닝은 모든 FretSpace Note 속성을 해당 프렛 위치에 맞는 음표로 초기화하는 것을 의미합니다. TuneString 메서드에서 작업중인 문자열을 확인하고 선택한 문자열에 적용 할 메모 목록을 반환합니다. 나는 내 코드를보고 큰 냄새가 난다. 여기에 TuneString 방법의 문제가되는 부분은 다음과 같습니다 -
public void TuneString(GuitarString stringToTune, FretSpace[,] fretboard)
{
List<string> notes = null;
if (stringToTune == GuitarString.ELow)
{
notes = _scaleGenerator.GetScale(Scale.E).ToList();
}
if (stringToTune == GuitarString.A)
{
notes = _scaleGenerator.GetScale(Scale.A).ToList();
}
if (stringToTune == GuitarString.D)
{
notes = _scaleGenerator.GetScale(Scale.D).ToList();
}
if (stringToTune == GuitarString.G)
{
notes = _scaleGenerator.GetScale(Scale.G).ToList();
}
if (stringToTune == GuitarString.B)
{
notes = _scaleGenerator.GetScale(Scale.B).ToList();
}
if (stringToTune == GuitarString.EHigh)
{
notes = _scaleGenerator.GetScale(Scale.E).ToList();
} //carry on and tune the string using the notes we returned
나는 어떤 디자인 패턴 마스터입니다 없지만 코드는 냄새에 대한 I 빠르게 날카로운 코를 획득하고있다. 동일한 메소드가 매번 호출되지만 다른 매개 변수 만 있으면이 작업을 수행하는 더 좋은 방법이 있습니까? 나는 사령부를 보았다. 값이 반환되는 곳에서는 적용되지 않지만 내가 틀렸다면 나를 수정하십시오. 나는 또한 공장을 보았다. 그러나 이것은 대상의 계열을 반환하는 것과 관련이있다.이 경우에는 적용되지 않는다. I'v는 한 시간의 가장 좋은 부분에 대해 스택 오버 플로우를 검색하여 관련 예제를 찾을 수없는 것 같습니다. 누구든지 도와 줄 수 있어요. 감사.
당신이 말하는 코드 냄새는 무엇입니까? Btw,'else if' 또는'switch'를 사용하십시오. –
저는 제가 끊임없이 제 디자인 결정에 의문을 제기하는 그 단계에 있습니다. 나는 아마추어이고 그것은 내게 보이지도 느끼지 않습니다. 내가하고 싶은 일을하는 더 좋은 방법이 있다면. 마찬가지로이 설계에 아무런 문제가 없다면, 또한 알아야합니다. 그렇지 않으면 switch 문 제안은 고마워했다. –