C#のインタフェースでテンプレートメソッドパターン

9月ももう末ですね。
ようやく涼しくなって来てありがたいです。今夏は暑すぎました。。。

最近今更のように少しずつデザインパターンを学習(再学習含む)しています。
学習中にJavaのコードをC#で書き換える写経をしています。

そんな中でAbstractクラスで実装されがちなテンプレートメソッドパターンを
C#の場合はインタフェースのみで実現できることに気が付きました。
(Javaはおそらく完全な実現は無理そうです、
 インタフェースでfinal defaultなメソッドは宣言できないみたいなので)

実現方法は
「C#8.0でインタフェースにデフォルト実装メソッドを定義し、sealedで修飾」
です。

実現例:

/// <summary> 表示インタフェース </summary>
public interface IDisplay {
    /// <summary> オープンします。 </summary>
    void Open();
    /// <summary> プリントします。 </summary>
    void Print();
    /// <summary> クローズします。 </summary>
    void Close();

    /// <summary> 表示します。 </summary>
    sealed void Display() {
        Open();
        Print();
        Close();
    }
}

「C#8.0以降なら似たようなことをできるものの
 C#にはfinal修飾子がないため実現できない」と思っていたのですが、
デフォルト実装したメソッドをsealedで修飾可能なことに今更気付きました。
(というかそもそもメソッドにsealed修飾できることを知りませんでした)

これならデフォルト実装したテンプレートメソッドを
継承先のクラスにより上書きされてしまうことを防げますね。

実際にテンプレートメソッドパターンを実装することはあまりないかもしれませんが、
インタフェースにsealedなデフォルト実装メソッドを宣言可能なことは
知っているといずれ役立ちそうな気がします。

※調べてみると2019年に既に気付いていた方がおりますね。
 もしかして皆さん知っておられるのでしょうか。

Template Method Pattern C# 8.0風味 #デザインパターン – Qiita

以上です。

工場の検査設備PCソフトのリプレイス

先週末にお客様工場のPCソフト更新に行ってきました。

以前に別会社さんが作成されたPCソフトの出来が良くないため、インフォテックで全てリプレイスを行った案件です。

同じような設備が4台あり、元々は設備ごとに微妙に異なるPCソフトを使用していましたが、インフォテックが作成したソフトでは、1種類のソフトで全ての設備が動作するようにしました。バラバラのソフトにすると保守に無駄に時間とコストがかかり、お客様の不利益になるので良くないです。

今回は最後の4台目の設備のPCソフト更新でした。
さすがに4台目になると慣れたもので、旧部材の撤去・新PCの設置・ADとI/Oの配線変更・動作検証などスムーズに進みました。

プログラマーの知識

こんにちはmtjです。

プログラマーという職業はおそらくですがプログラムに詳しいと思われるでしょう
しかし、プログラムに詳しいという事は大体がPC自体の動作に詳しい人達です。

そしてソフトの使用される分野に対しても詳しい人が多いです。
画像処理であれば画像処理の動き、カメラ等の知識
3Dプログラムであれば3D空間の演算等それらの処理
ゲームプログラミングであればゲームの知識

その分野の知識がなければ言われたコードは書けるもののその先に踏み込む事は不可能だと思っています。
なので自分たちは新しい分野のソフトを作る時にその分野の知識も同時に仕入れています。

そういった知識を入れる事を忘れずに 取り残されないようにしていきたいです

VSとMacのペアリング時のメモリ不足をキャッシュ削除により解消

MAUIでiPhoneアプリを開発する場合、ビルドのためにVisualStudioとMacをペアリングする必要があります。
アプリ開発の終盤、そのペアリング時やビルド時にMacのメモリが不足している旨の警告が出るないしエラーが出て失敗することが頻発しました。
その解決方法の共有となります。

タイトルの通り、キャッシュの削除により解決できました。
Windows・Macそれぞれで削除が必要です。

・Windowsでは以下の2フォルダがキャッシュなので削除
%localappdata%\Temp\Xamarin\XMA
%localappdata%\Xamarin\MonoTouch(←こちらはMacの接続先情報なので不要かもですが念のため)

・Macでは以下のフォルダがキャッシュなので削除
$HOME/Library/Caches/Xamarin/XMA

これで警告やエラー出ずにペアリング・ビルドできるようになりました。

以下はキャッシュが溜まる要因の予想です。
・ペアリング時にVisualStudioのバージョンないしMAUIのバージョンごとにキャッシュが溜まる
・異なるPCや異なるプロジェクトでペアリングを行うと、バージョンが異なりがちでその度にキャッシュが溜まる
くらいにふんわり考えています。

若干面倒なのであまりキャッシュ溜まらないことを願っています。
今後は1プロジェクトを改造・保守するのが主なので、上記予想が正しければ大丈夫なのではないかと思うのですが。。。

以上です。

[参考]
Clearing the Broker, IDB, Build, and Designer Agents on the Mac – Microsoft Learn
c# – Can't connect VS2022 .Net Maui Project with Mac – Stack Overflow
macos – I can't connect to Mac with Xamarin Mac Agent from Visual Studio 2015 – Stack Overflow