체스 판과 조각에 인터페이스가 삽입 된 코드가 있습니다. DiagonalDirections는 열거 형입니다. 여태까지는 그런대로 잘됐다. 의존성을 주입하지 않으며 숨겨진 의존성을 사용하지도 않습니다.인터페이스로 숨겨진 종속성을 해결하는 방법
private void addToAllowedPositions(IChessboard chessboard, IPiece piece, DiagonalDirections direction)
{
int horizontalIndex = piece.Position.IndexHorizontal;
int verticalIndex = piece.Position.IndexVertical;
while (AreIndexesValid(setHorizontalIndexDirection(direction, ref horizontalIndex), setVerticalIndexDirection(direction, ref verticalIndex)))
{
IPosition currentPosition = new Position(horizontalIndex, verticalIndex);
IPiece currentPiece = chessboard.GetPiece(currentPosition);
if (currentPiece == null)
{
allowedPositions.Add(currentPosition);
}
else if (currentPiece.Color != piece.Color)
{
allowedPositions.Add(currentPosition);
break;
}
else break;
}
}
문제는이 코드 라인이다 :
IPosition currentPosition = new Position(horizontalIndex, verticalIndex);
난 정말 내가 여기에 인터페이스를 사용하는 방법을 모르는
? 매번 새로운 직책을 만들어야합니다. 그것은 내가 어떻게 고립시키는 지 모른다는 나의 유일한 의존이다. 나는 또한이 코드 조각을 단위 테스트하고 싶을 때 문제가있다. Position 클래스에서 변경된 사항이 있으면 기존의 단위 테스트에서 즉시이 메서드에도 반영됩니다.
당신은 새로운 위치를 만드는 공장을 사용할 수 있습니다. POCO는'Position'입니까? – Nkosi
예. 오직 두 개의 속성 만 - 수평 및 수직. 공장 사용 방법? 아마도 당신은 모범을 보았을 것입니까? – FrenkyB
대신 수동으로 위치를 생성하는 대신 생성을 다른 것으로 위임합니다. 위치를 생성하는 것이 유일한 작업 인 새 팩토리 서비스를 만들거나 기존 인터페이스 중 하나에서 팩토리 메소드를 사용할 수 있습니다. 이미 체스 보드 인터페이스에서 팩토리 메소드를 사용하여 위치를 만들 수 있다고 대답 한 사용자가 있습니다. – Nkosi