使用抽象类来映射常见的 JSON 字段是一种不好的做法吗?

问题描述 投票:0回答:0

我在我的应用程序中实现了一些输入数据验证器,我最终得到了一个抽象类,其中包含映射到 JSON 的通用属性。我还创建了抽象方法和虚拟方法来强制派生类始终保持相同的验证算法模式。我没有遵循任何设计模式,因此我想知道您对我的代码的看法。

我的抽象类是这样的:

public abstract class DataValidation
{
  [JsonProperty("cleaned")]
  public string CleanedInput => _cleanedInput;

  [JsonProperty("isValid")]
  public bool IsValid => _isValid;

  protected string _cleanedInput;
  private bool _isValid;

  public DataValidation(string input)
  {
    _cleanedInput = CleanInput(input);
    _isValid = ValidateInput(_cleanedInput);
  }

  protected abstract bool ValidateData(string cleanedInput);  
  protected virtual string CleanInput(string input) => input.Trim();
}

还有一些派生类,我在其中执行出生日期或文档格式等验证:

public sealed class ClassA : DataValidation
{
    public ClassA(string input) : base(input)
    {
    }
    
    protected override bool ValidateData(string input)
    {
      // ... Logic to validate input. 
      // Returns true as an example.

      return true;
    }
}

另一个重写 CleanInput 方法并返回 invalid 验证的类:

public sealed class ClassB : DataValidation
{
    public ClassB(string input) : base(input)
    {
    }

    protected override string CleanInput(string input) =>
      return input.Trim().Replace(".", "").Replace("-", "");
    
    protected override bool ValidateData(string input)
    {
      // ... Logic to validate input. 
      // Returns false as an example.

      return false;
    }
}

最后,我将这些对象序列化并得到一个像这样的 json:

// ClassA
{
  "cleaned": "inputA_cleaned",
  "isValid": true
}

// ClassB
{
  "cleaned": "inputB_cleaned",
  "isValid": false
}

我所做的被认为是好的还是坏的做法?

oop design-patterns architecture abstract-class
© www.soinside.com 2019 - 2024. All rights reserved.