DDDの考えを取り入れることでテストコードや抽象化が一段と捗った気がします。
この部分にあまり力を入れてこなかったので新たにテスト用にinsta、抽象化に向けてnutypeを追加しました。
instaは所謂スナップショットテスト向けのcrateで公式サイトや各所で情報が出ているので使い方の理解は簡単だと思います。
TUIの画面周りのテストはこれで大部分カバーできると思います。
nutypeはNew Type Pattern向けのcrateでこちらの記事に影響を受けて使い始めました。
New Type PatternはRust の実装パターンの一つで既存の型への薄いラッパーのようなものです。既存の型を新しい型で包むことによってカプセル化して内部を隠蔽します。
例えばIDを扱う型を考えてみましょう。IDの値が数字だけならu32など数値系の型を使うかアルファベットなども入るようでしたらString型を使うことになると思います。
IDが数値のみという設計で実装して、もし後にセキュリティなどの理由で記号も含めるような仕様変更があった場合、直接このようなプリミティブな型を使用していると修正が大変になるかもしれません。
New Type Patternであれば
// struct ID(u32);
struct ID(String);Code language: JavaScript (javascript)のようにID型の中身を変更することである程度対応できるようになります。
またIDという型の名前を使うことで可読性も上がります。
nutypeではさらにバリデーションやサニタイゼーションも行うことができるので桁数のチェックや含むことが可能な記号の種類のチェック等も型につけることができるようになります。
ということでちょっと使い始めましたが、ちょっとした値の受け渡しもこれを使うと定義の手間やバリデーションによるパフォーマンスの影響もあると思うので使い所は考えたほうが良いかもしれません。
第2部 TOC
GitHubにコードをアップロードしています。0.1.1バージョン
コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。
# Example
$ cargo run --example first_step
Code language: Bash (bash)
