나는 C#으로 스도쿠를 만들고있다.일반적으로 유효성 검사를 처리하기 위해 어떤 패턴이 재미 있습니까?
사용자는 새로운 스도쿠를 만들 수 있습니다. 내 스도쿠 클래스 :
public class Sudoku
{
#region Datamembers
private Field[,] grid;
private byte blockRows;
private byte blockColumns;
private Hashtable peers;
사용자는 새로 만든 스도쿠을 절약 할 수 있습니다. 이렇게하면 몇 가지 유효성 검사가 수행됩니다. 예 : 모든 필드가 채워지지 않았는지 확인하십시오. 모든 필드가 비어 있지 않은지 확인하십시오. 동일한 행, 열, 블록에 동일한 숫자가 없는지보십시오.
내 유효성 검사는 다음과 같이 끝납니다. 스도쿠 클래스에 위치)
public bool IsValid()
{
bool isValidSetup = this.IsValidSetup();
if (!isValidSetup) return isValidSetup;
return this.IsTrulyValid();
}
private bool IsValidSetup()
{
bool isEntirelyFilled = this.Is_EntirelyFilled();
bool isEntirelyEmpty = this.Is_EntirelyEmpty();
bool hasIdenticalDigits = this.Has_IdenticalDigits();
this.Add_SetupValidationMessages(isEntirelyFilled, isEntirelyEmpty, hasIdenticalDigits);
return !isEntirelyEmpty && !isEntirelyFilled && !hasIdenticalDigits;
}
private bool IsTrulyValid()
{
this.Clean();
this.Solve();
bool hasNoSolutions = !this.Is_EntirelyFilled();
bool hasMultipleSolutions = false;
if (!hasNoSolutions) hasMultipleSolutions = this.Has_MultipleSolutions();
this.Add_TrulyValidationMessages(hasNoSolutions, hasMultipleSolutions);
return !hasNoSolutions && !hasMultipleSolutions;
}
스도쿠에서 유효성 검사를 분할하여 OOP로 만들고 싶습니다.
전략 패턴을 살펴 보았습니다. 그 패턴은 내가 사용할 수있는 것으로 보였으므로 유효성 검사에 많이 사용됩니다. 그러나 패턴을 이해하는 한, 결국 내가 필요로하는 것이 아닙니다. 이유는 특정 요소를 기반으로 유효성 검사를 선택했기 때문입니다. 나는 틀렸어.하지만 내 상황에서 내가 왜 필요할지 알 수는 없어.
다른 클래스에서 별도의 검증 (Is_EntirelyFilled())이 필요합니다. 그게 유일한 스도쿠를 확인하는 데 사용되는 유일한 사람이야. 그래서이 모든 유효성 검사를 1 클래스에 적용해야합니까? 또는 각 유효성 검사에 대해 별도의 클래스를 만들고이를 개별적으로 호출해야합니까? 다른 제안?
같은
뭔가 내가 스도쿠 게임을 모르지만 나는 물론 소프트웨어 디자인 패턴에 참석하는 동안 내 강사 나에게 스도쿠 예를 주었기 때문에 당신이 전략을 사용한다고 생각합니다. –
Abstract로 ValidationHandle이 있어야합니다. 필요에 따라 다르게 구현하고 클라이언트 코드에 전달하십시오. 내가 기억하는 것처럼 그 무엇인가 –