c# – 很多构造函数参数 – 有更好的方法吗?

前端之家收集整理的这篇文章主要介绍了c# – 很多构造函数参数 – 有更好的方法吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
public class HourlyForecastData
{
    public DateTime DateTime { get; private set; }
    public decimal TemperatureCelcius { get; private set; }
    public decimal DewPoint { get; private set; }
    public string Condition { get; private set; }
    public int ConditionCode { get; private set; }
    public int WindSpeed { get; private set; }
    public string WindDirection { get; private set; }
    public decimal WindDegrees { get; private set; }
    public int UltravioletIndex { get; private set; }
    public decimal Humidity { get; private set; }
    public decimal WindChill { get; private set; }
    public int HeatIndex { get; private set; }
    public decimal FeelsLike { get; private set; }
    public decimal Snow { get; private set; }

    public HourlyForecastData(DateTime dateTime,decimal temperatureCelcius,...)
    {
        DateTime = dateTime;
        TemperatureCelcius = temperatureCelcius;
        //...set all the other properties via constructor
    }
}

我正在努力学习更好的软件设计和OOP.我正在创建一个可以访问回复XML的气象服务的库.服务提供了许多不同的字段,因此我为每个XML字段创建了属性.但是,通过构造函数设置该数量属性会感觉有点混乱.我可以省略构造函数并拥有公共setter但我正在尝试创建一个不可变类.

我已经环顾了不同的设计模式,似乎有一些“Builder”和“Factory”模式.但是,我很难理解如何将其应用到我的代码中.或者我应该使用完全不同的东西来填充这些对象中的属性

解决方法

在这种情况下,组合可能是一个很好的选择.特别是因为有些参数属于特定类别.

例如:

public int WindSpeed;
public string WindDirection;
public decimal WindDegrees;

为它们创建一个新对象,然后访问不同的值:

weatherData.Wind.Speed;

并将新的wind对象传递给构造函数

var wind = new Wind(xmlData.WindSpeed,xmlData.WindDirection,xmldata.WindDegrees);
var weatherReport = new WeatherReport(wind,/* .... */);

我还会介绍几个枚举.因为到目前为止,weatherReport的用户例如必须知道字符串WindDirection可以具有哪些值.如果将字符串转换为枚举,则使用不同的值会更容易.

最后要注意的是,我通常只使用构造函数,如果实际上必须为类指定一些有效状态的值.例如,在您的情况下,最小有效状态是日期和温度?然后将它们放在构造函数中.

原文链接:https://www.f2er.com/csharp/239201.html

猜你在找的C#相关文章