C#におけるメソッドの設計について
C#の初学者でオセロを作っています。
以下はMainFormにおけるオセロの盤上や周りのプレイヤー・石数表記ラベルなどを再描画するプログラムです。
講師がいるのですが例1に対して
「ここに戻り値・引数の存在しないメソッドがあるということは抽象度が揃っていないということだから上手くメソッドが組めていないはずだ」
「引数と戻り値どちらかはあるように組んでみるべき、そんなメソッドはロジックがない手続き型のプログラムでしかない」
というような旨の指摘を受けました。
自分としては例2のようにならないよう、また個別利用・変更など管理しやすいように1つの処理ごとにメソッドとしてまとめているつもりです。
1つのメソッドは1つの処理だけ行うべきという基準も学んでいるのですが、それらを踏まえて質問です。
・そもそもこういった設計が悪いとすれば改善はどのようにするべきなのか
・メソッドの中にメソッドがあると役割を分けられていないに等しいのか
講師としては直接の改善案はまだ伝えたくないようですが、自分だけでは全く理解が進まなかったのでここで質問してみます。
例1)
private void RefreshView(List<CellInfo> cells)
{
DrawLabelsText(cells);
DrawPlayerLabel();
DrawStoneCount();
}
private void DrawPlayerLabel()
{
Label turnPlayerLabel = TurnLabelPanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "TurnPlayerLabel");
Label turnColorLabel = TurnLabelPanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "TurnColorLabel");
turnPlayerLabel.Text = m_Board.CurrentPlayerText;
turnColorLabel.Text = m_Board.CurrentColorText;
turnColorLabel.ForeColor = m_Board.CurrentColor;
}
private void DrawStoneCount()
{
Label blackStoneLabel = CountBlackStonePanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "CountBlackStoneLabel");
Label whiteStoneLabel = CountWhiteStonePanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "CountWhiteStoneLabel");
blackStoneLabel.Text = m_Board.BlackStone.ToString();
whiteStoneLabel.Text = m_Board.WhiteStone.ToString();
}
例2)
private void RefreshView(List<CellInfo> cells)
{
DrawLabelsText(cells);
Label turnPlayerLabel = TurnLabelPanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "TurnPlayerLabel");
Label turnColorLabel = TurnLabelPanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "TurnColorLabel");
turnPlayerLabel.Text = m_Board.CurrentPlayerText;
turnColorLabel.Text = m_Board.CurrentColorText;
turnColorLabel.ForeColor = m_Board.CurrentColor;
Label blackStoneLabel = CountBlackStonePanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "CountBlackStoneLabel");
Label whiteStoneLabel = CountWhiteStonePanel.Controls.OfType<Label>().FirstOrDefault(label => label.Name == "CountWhiteStoneLabel");
blackStoneLabel.Text = m_Board.BlackStone.ToString();
whiteStoneLabel.Text = m_Board.WhiteStone.ToString();
}