なんだかGoodVibes

日々の勉強メモです。

引数が多い時にパラメータクラスで渡す

引数がどんどん増えていってしまうことが多々あります。
一箇所のみであるのならば少しの手間で修正できますが
いくつかの場所の修正が必要な場合、ミスのもとになります。
今日は、引数が多くなってしまった、もしくは引数の変更が有り得そうな場合の手法を
以前、教えてもらったので忘れないようにメモ。  

方法は簡単。引数に必要なデータを揃えたクラスを作成するのです。
以下サンプルです。

/// <summary>
/// メイン処理です。
/// </summary>
public void MainProcess()
{
    var param1 = new Parameter();
    param1.Code = 1001;
    param1.Name = "田中太郎";
    param1.Age = 45;
    param1.DepartmentId = 1;
    Display(param1);

    var param2 = new Parameter();
    param2.Code = 1002;
    param2.Name = "山田花子";
    param2.Age = 27;
    param2.DepartmentId = 2;
    Display(param2);

    var param3 = new Parameter();
    param3.Code = 1003;
    param3.Name = "山本一郎";
    param3.Age = 35;
    param3.DepartmentId = 3;
    Display(param3);
}

/// <summary>
/// 情報を出力します。
/// </summary>
/// <param name="param">パラメータクラス</param>
public void Display(Parameter param)
{
    Console.WriteLine("-----------------------");
    Console.WriteLine($"[コード]:{param.Code}");
    Console.WriteLine($"[名 前]:{param.Name}");
    Console.WriteLine($"[年 齢]:{param.Age}");
    Console.WriteLine($"[部署ID]:{param.DepartmentId}");
    Console.WriteLine($"[部署名]:{param.GetDepartment()}");
}

/// <summary>
/// パラメータクラスです。
/// </summary>
public class Parameter
{
    /// <summary>
    /// コード
    /// </summary>
    public int Code { get; set; }

    /// <summary>
    /// 名前
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 年齢
    /// </summary>
    public int Age { get; set; }

    /// <summary>
    /// 部署ID
    /// </summary>
    public int DepartmentId { get; set; }

    /// <summary>
    /// 部署名を取得します。
    /// </summary>
    /// <returns>部署名</returns>
    public string GetDepartment()
    {
        if (this.DepartmentId == 1)
        {
            return "本部";
        }
        else if (this.DepartmentId == 2)
        {
            return "経理";
        }
        else
        {
            return "システム";
        }
    }
}

出力結果

-----------------------
[コード]:1001
[名 前]:田中太郎
[年 齢]:45
[部署ID]:1
[部署名]:本部
-----------------------
[コード]:1002
[名 前]:山田花子
[年 齢]:27
[部署ID]:2
[部署名]:経理
-----------------------
[コード]:1003
[名 前]:山本一郎
[年 齢]:35
[部署ID]:3
[部署名]:システム

 
このサンプルを見てもらうとわかるのですが
あとから引数変えたいな…って場合はParameterクラスの変更だけで完了します。
今後のメンテナンスも楽になりますね!