私は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 つが必要です。数独の検証に使用されるのはこれだけではありません。では、このすべての検証を 1 つのクラスに入れるだけでよいでしょうか? または、検証ごとに個別のクラスを作成し、個別に呼び出す必要がありますか? 他の提案はありますか?