|
アジャイルで重視しとる「コミュニケーション」いうのは、こういうことやないねん。なにコメントで世間話しとんねん。
紙のドキュメントを使うにしろ、フェイス・トゥ・フェイスでやるにしろ、大事なことは、
「伝えるべき情報をきっちり伝える」
いうことや。
参考までに、わいが書いたもうちっとだけましな、同じ「マウスでクリックされたときにカーソルに近い直線を選択状態にする」のソース・コードを見せたるわ。
namespace 幾何
{
public class 点 // (x, y)
{
double x, y;
public double X座標 { get { return x; } }
public double Y座標 { get { return y; } }
public double 絶対値
{
get { return Math.Sqrt(x * x + y * y); }
}
public 点(double x, double y)
{
this.x = x;
this.y = y;
}
}
public class 直線 // (ax + by + c = 0)
{
double a, b, c;
public double A { get { return a; } }
public double B { get { return b; } }
public double C { get { return c; } }
public 直線(double a, double b, double c)
{
if (a == 0.0 && b == 0.0)
throw new ArgumentException("直線やない");
this.a = a;
this.b = b;
this.c = c;
}
}
public static class 共通
{
public static double 距離(直線 line, 点 point)
{
Debug.Assert(line.A != 0.0 || line.B != 0.0,
"あり得へん直線");
// 点と直線の距離の公式:
// 点(x1,y1)と直線(ax+by+c=0)の距離
//
// |ax1+by1+c|
// -----------
// (a2 + b2)
return Math.Abs(line.A * point.X座標
+ line.B * point.Y座標 + line.C)
/ new 点(line.A, line.B).絶対値;
}
}
}
namespace CAD
{
abstract class デバイス
{
……中略……
}
abstract class 図形
{
private bool isSelected = false;
public bool 選択中
{
get { return isSelected; }
set { isSelected = value; }
}
public abstract double 距離(幾何.点 aPoint);
public abstract void 描画(デバイス aDevice);
}
class 直線図形 : 図形
{
幾何.直線 line = null;
public 幾何.直線 座標
{
get { return line; }
set { line = value; }
}
public 直線図形(幾何.直線 aLine)
{
line = aLine;
}
public override double 距離(幾何.点 aPoint)
{
return 幾何.共通.距離(座標, aPoint);
}
public override void 描画(デバイス aDevice)
{
……中略……
}
}
class 図面
{
List<図形> figures = new List<図形>();
public List<図形> 図形群
{
get { return figures; }
}
}
abstract class コマンド
{
public abstract void クリック時の処理(デバイス aDevice, 幾何.点 clickedPoint, 図面 aDrawing);
}
class 選択コマンド : コマンド
{
public override void クリック時の処理(デバイス aDevice, 幾何.点 clickedPoint, 図面 aDrawing)
{
ある点から最も近い図形の選択(aDevice, clickedPoint, aDrawing);
}
void ある点から最も近い図形の選択(デバイス aDevice, 幾何.点 aPoint, 図面 aDrawing)
{
図形 nearestFigure =
ある点から最も近い図形の検索(aPoint, aDrawing);
if (nearestFigure != null)
{
nearestFigure.選択中 = true;
nearestFigure.描画(aDevice);
}
}
図形 ある点から最も近い図形の検索(幾何.点 aPoint, 図面 aDrawing)
{
図形 result = null;
double minimumDistance = double.MaxValue;
foreach (図形 aFigure in aDrawing.図形群)
{
double distance = aFigure.距離(aPoint);
if (distance < minimumDistance)
{
result = aFigure;
minimumDistance = distance;
}
}
return result;
}
}
……中略……
}
|
|
良いソース・コードの例(長すぎないメソッド) |
「クリックされたときにマウス・カーソルの近くにある直線を選択状態にする」というC#のプログラム。※テスト・コードは省略。 |
|
|
前者のソース・コードは、なんぼ読んだかて、どんな設計なんかよう分からへんようなしろもんや。
アカウンタビリティ、すなわち説明責任を果たしとらんのや。そんなソース・コードやったら確かにドキュメントの代わりにはならんやろ。そうやないねん。
ソース・コードには、設計を語らせなあかん。「ソース・コード=設計モデルに関するドキュメント」やないとあかんねん。ソース・コードには、設計モデルに関するアカウンタビリティがあんねん。ソース・コードにそれを果たさしたってくれ、いうことや。
つまり、わいが声を大にしていいたいのはやな、
「アカウンタビれ!」
いうことや。すなわち説明責任を果たせと。もっともっとアカウンタビったらんかい!
|