我正在用 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 类中吗?或者应该为每个验证创建单独的类并单独调用它们?还有其他建议吗?