C# 在处理验证时,通常需要关注哪些模式?
我正在用c#创建一个数独游戏 用户可以创建一个新的数独。 我的数独课:C# 在处理验证时,通常需要关注哪些模式?,c#,validation,design-patterns,C#,Validation,Design Patterns,我正在用c#创建一个数独游戏 用户可以创建一个新的数独。 我的数独课: public class Sudoku { #region Datamembers private Field[,] grid; private byte blockRows; private byte blockColumns; private Hashtable peers; 用户可以保存新创建的数独。执行此操作时,会执行一些验证。例如:查看是否所有字段都已填充,查看是否所有字
public class Sudoku
{
#region Datamembers
private Field[,] grid;
private byte blockRows;
private byte blockColumns;
private Hashtable peers;
用户可以保存新创建的数独。执行此操作时,会执行一些验证。例如:查看是否所有字段都已填充,查看是否所有字段都为空,查看同一行、列、块中是否没有相同的数字
我的验证结果如下:(它位于数独类)
我想将验证从数独中分离出来,使之成为OOP
我研究了战略模式,因为这看起来像是我可以使用的东西,并且在验证中使用了很多。但就我所理解的模式而言,这毕竟不是我所需要的;这是因为它基于基于某些因素选择验证。我可能错了,但我似乎不明白在我的情况下为什么我需要这样
我需要另一个类中的一个单独的验证(Is_EntirelyFilled())。这是唯一一个不仅仅用来验证数独的。
那么,我应该把所有的验证放在一个类中吗?或者应该为每个验证创建单独的类并分别调用它们?还有其他建议吗?您应该有一个ValidationHandle作为抽象,根据您的需要以不同的方式实现它,并将其传递给您的客户端代码。像我记得的那样 iBrakeBehavior应该是您的IValidationHandle 子类是验证类型 Car是cllient类,您需要在客户端代码中提供一个IValidationHandle实例。 在客户端代码中需要调用IValidationHandleInstance.Validate()的地方 通过多态性,它知道验证是如何执行的 诸如此类
public interface IValidationHandle
{
bool Validate();
}
//TODOs: Separate classes
public class IsTrulyValidValidator:IValidationHandle;
public class IsValidValitor:IValidationHandle;
public class EntirelyFilledValidator:IValidationHandle;
class Client
{
private IValidationHandle validator=null;
public void SetValidationHandler(IValidationHandle validator)
{
this.validator=validator;
}
//Where You need call
validator.Validate();
}
您应该有一个ValidationHandle作为抽象,根据您的需要以不同的方式实现它,并将其传递给您的客户机代码。像我记得的那样 iBrakeBehavior应该是您的IValidationHandle 子类是验证类型 Car是cllient类,您需要在客户端代码中提供一个IValidationHandle实例。 在客户端代码中需要调用IValidationHandleInstance.Validate()的地方 通过多态性,它知道验证是如何执行的 诸如此类
public interface IValidationHandle
{
bool Validate();
}
//TODOs: Separate classes
public class IsTrulyValidValidator:IValidationHandle;
public class IsValidValitor:IValidationHandle;
public class EntirelyFilledValidator:IValidationHandle;
class Client
{
private IValidationHandle validator=null;
public void SetValidationHandler(IValidationHandle validator)
{
this.validator=validator;
}
//Where You need call
validator.Validate();
}
我不知道数独游戏,但我认为你们应该使用策略,因为我的导师在我参加软件设计模式课程时给了我一个数独的例子。你们应该有一个ValidationHandle作为抽象,根据你们的需要不同地实现它,并将它传递给你们的客户代码。我记得我不知道数独游戏,但我认为你们应该使用策略,因为我的导师在我参加软件设计模式课程时给了我一个数独的例子。你们应该有一个ValidationHandle作为抽象,根据你们的需要以不同的方式实现它,并将它传递给你们的客户代码。就像我记得的那样,我现在确实有这个。我只是觉得让所有这些分离的类“IdenticalDigits”、“EntirelyFilled”有点奇怪。。所以,谢谢你,我还是会这么做的!是的,嗯;我仍然需要创建单独的类“IdenticalDigits”、“EntirelyFilled”。。它实现了IValidate接口,对吗?IsTrulyValid和isSetup在不必要的替换中有效,以创建一种“逻辑”封装。如果不分离文件,它开始看起来像Façade。Façade通常用于提供API和隐藏混乱的代码。所以分离似乎更适合重用。我现在确实有了这个。我只是觉得让所有这些分离的类“IdenticalDigits”、“EntirelyFilled”有点奇怪。。所以,谢谢你,我还是会这么做的!是的,嗯;我仍然需要创建单独的类“IdenticalDigits”、“EntirelyFilled”。。它实现了IValidate接口,对吗?IsTrulyValid和isSetup在不必要的替换中有效,以创建一种“逻辑”封装。如果不分离文件,它开始看起来像Façade。Façade通常用于提供API和隐藏混乱的代码。所以分离似乎更适合重用。