繁体   English   中英

使用必须存在的属性初始化类的最佳方法

[英]Best approach for initialising a class with a property that must exist

示例类

public class Company {
    public Details Details { get; set; }
    public List<Employeee> Employees { get; set; }

    public Company() { 
    }
}

public class Details {
    public string Name { get; set; }
    public string Url { get; set; }

    public Details() {
    }
}

代码中某处的用法...

var c = new Company();
c.Details = new Details();
c.Details.Name = "Example";
c.Details.Url = "http://example.org/";

没有细节的公司是没有意义的。

我的一个想法是

  • 更改 Company 构造函数以自动创建新的 Details
  • 更改详细信息集以确保它没有设置为空

这似乎是一个常见问题,我想知道是否有一种标准的方法来处理它,这将导致可测试的类。 我不确定要搜索什么。

如果我理解正确,我认为最好的方法是仅创建一个以Details作为参数的构造函数。

例子:

public class Company
{
    public Details Details { get; set; }
    public List<Employeee> Employees { get; set; }

    public Company(string Name, string Url)
    {
        this.Details = new Details(Name, Url);
    }
    
    public Company(Details Details)
    {
        this.Details = Details;
    }
}

public class Details
{
    public string Name { get; set; }
    public string Url { get; set; }

    public Details(string Name, string Url)
    {
        // If the validation fails, throw an error
        if (string.IsNullOrWhiteSpace(Name))
            throw new ArgumentException($"'{nameof(Name)}' cannot be null or empty", nameof(Name));
        if (string.IsNullOrWhiteSpace(Url))
            throw new ArgumentException($"'{nameof(Url)}' cannot be null or empty", nameof(Url));

        this.Name = Name;
        this.Url = Url;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM