gpt4 book ai didi

c# - 在域类中限制字符串长度

转载 作者:太空狗 更新时间:2023-10-29 21:59:43 25 4
gpt4 key购买 nike

我有一个持久性无知域模型,它使用抽象存储库来加载域对象。我的存储库(数据访问层 (DAL))的具体实现使用 Entity Framework 从 sql server 数据库中获取数据。数据库的许多 varchar 列都有长度限制。现在假设我有以下域类:

public class Case
{
public Case(int id, string text)
{
this.Id = id;
this.Text = text;
}

public int Id { get; private set; }
public string Text { get; set; }
}

以及定义如下的抽象存储库:

public abstract class CaseRepository
{
public abstract void CreateCase(Case item);
public abstract Case GetCaseById(int id);
}

sqlserver中表的[text]列定义为nvarchar(100)

现在我知道我提到我的域类 (Case) 是持久性无知的,但是我觉得它允许text 参数的值最终不能被我的具体存储库实现保存,因为 Entity Framework 将 text 属性分配给 Entity Framework 生成的类时,当它超过 100 个字符时会抛出异常。所以我决定我希望在域模型中检查这个约束,因为这允许我在尝试之前检查数据有效性将其传递给 DAL,从而使错误报告更加以域对象为中心。我想你可能会争辩说我可以检查一下我的构造函数和属性 setter 中的约束,但由于我有数百个类都有类似的约束,所以我想要一个更通用的解决问题的方法

现在,我想到的是一个名为 ConstrainedString 的类,定义如下:

public abstract class ConstrainedString
{
private string textValue;

public ConstrainedString(uint maxLength, string textValue)
{
if (textValue == null) throw new ArgumentNullException("textValue");
if (textValue.Length > maxLength)
throw new ArgumentException("textValue may not be longer than maxLength", "textValue");

this.textValue = textValue;
this.MaxLength = maxLength;
}

public uint MaxLength { get; private set; }

public string Value
{
get
{
return this.textValue;
}

set
{
if (value == null)
throw new ArgumentNullException("value");
if (value.Length > this.MaxLength) throw new ArgumentException("value cannot be longer than MaxLength", "value");
this.textValue = value;
}
}
}

此外,我还有一个名为 String100ConstrainedString 实现:

public class String100 : ConstrainedString
{
public String100(string textValue) : base(100, textValue) { }
}

因此导致 Case 的不同实现,如下所示:

public class Case
{
public Case(int id, String100 text)
{
this.Id = id;
this.Text = text;
}

public int Id { get; private set; }
public String100 Text { get; set; }
}

现在,我的问题是;我是否忽略了一些内置类或我可以使用的其他方法?或者这是一个合理的方法?

欢迎提出任何意见和建议。

提前致谢

最佳答案

我相信您的验证应该驻留在您的域模型中。你字段上的约束直接代表了一些业务逻辑。最终,您必须在坚持之前进行验证。

关于c# - 在域类中限制字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com