BETA

FHIRもどきを題材にしたWebAPIの実装(後編)

投稿日:2020-07-26
最終更新:2020-07-26

やりたいこと

  • (建前)自由にいじれるFHIRリポジトリが手元に欲しい。
  • (本音)MVVMパターンの実装と、そこにFileSystemWatcherを追加する場合の紆余曲折の備忘録を残したい。

諸注意

  • 前編はこちら。前編で吐き出したファイルを後ろで処理することを想定します。
  • 自力での試行錯誤の備忘録のため、ベストプラクティスかはわかりません。こうすべきという方法があればぜひコメントをください。

実装

実装環境:
・ Windows10
・ Visual Studio Community 2019
・ [RsyncFHIR] .Net Core 3.1

仮実装の全ソースはこちら:Github
FileSystemWatcherにawaitにて非同期メソッドをハンドルするとこんな感じ。

private FileSystemWatcher CreateWatcher(string watchPath)  
{  
    var rsmodel = new RSyncModel();  
    rsmodel.OnNewMessage += AddMessageItems;  

    FileSystemEventHandler? createdHandler = null;  
    RenamedEventHandler? renamedHandler = null;  
    createdHandler = async (s, e) => await rsmodel.MainProcAsync(watchPath, e.Name);  
    renamedHandler = async (s, e) => await rsmodel.MainProcAsync(watchPath, e.Name);  

    var watcher = new FileSystemWatcher(watchPath)  
    {  
        NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.CreationTime,  
    };  
    watcher.Created += createdHandler;  
    watcher.Changed += createdHandler;  
    watcher.Renamed += renamedHandler;  

    return watcher;  
}  

通常どおりにFileSystemWatcherを使用する場合に比べて、ハンドル時にawait/asyncを追加する程度です。
これはViewModelに入れていいものなのかどうなのか...

async/awaitを外した場合との動作の違いや、ハードウェアのプロセッサ数(気軽に比較したいならHyper-Vでの仮想プロセッサ数を弄るなど)での挙動の違いを見ると面白いかも。

その他

  • 今回はWebAPIとMVVM実装の備忘録の部分が大きいので前編・後編に分けましたが、保守性が著しく下がっているので素直にWebAPI単体で処理しましょう。
  • GET/PUT/DELETEは未実装ですが備忘録的には大した内容ではないので、そちらに関しては省略。
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@NMatsudaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう