PG日誌

読者です 読者をやめる 読者になる 読者になる

PG日誌

主にc#の事を書いています

インターフェースと仮引数


SIer業界って本当に不思議ですね。

プログラミングが一切できない人がコンポーネントの"プログラミング言語的な意味"のインターフェース仕様をExcelで出してきて「これ実装して」って言われたりします。こないだ久しぶりにそういう事をされてExcel見たらこんな感じでした。

public interface HogeAPIiInterface
{
    void Execute(string CommandID, string Mode);
}

たった3行なのに指摘がちりばめられています。もしかすると試されてるのかもしれません。

指摘内容は、.NETの標準ライブラリの命名規則を拝借すると

  • 3字以上連続する大文字は Pascal case を使う
    • というかインターフェースにAPIってつけない
  • interface は prefix に大文字のIをつける
    • なので正しくは 「IHoge」
  • 仮引数は camel case で書く

となって

public interface IHoge // 名前を変更
{
    void Execute(string commandID, string mode); // 仮引数を変更
}

が、最低限気持ち悪くないかと。

そのまま言われた通り実装するとこんな感じになるのですが

public class interface HogeAPIImpl : HogeAPIiInterface
{
    public void Execute(string CommandID, string Mode)
    {
        if(string.IsNullOrEmpty(CommandID))
        {
           throw new ArgumentException("CommandID");
        }
        
        if(!this.VailedMode(Mode))
        {
            throw new NotSuportedException(Mode + " type is not suported.");
        }
        
        // 以下略...
    }
}

こんな感じで記述がずっと続く確実に気持ち悪いですよね。何というか標準ライブラリとの表記の乖離が目立ちます。

I/Fはシグネチャさえ合っていれば実装時の引数の名前は気にしないのですができれば一貫していたいところです。

というか、「この詳細設計が気持ち悪いので直しましょう」を雰囲気を悪くせず伝える方がプログラム作るよりずっと難しいですよね。

言い方次第なんでしょうが、そんなにうまいこと伝えられる自信がないですね。正に試されています。

しかしここは今後気分よく作業するために交渉してきますか、、、