TOP(About this memo)) > 一覧(Dart) > (IMO)拡張や実装やclass修飾子の使い分
コンストラクタの再利用 | 多重継承・実装 | 列挙型からの利用 | 主な用途 | 主な用途(テスト) | |
---|---|---|---|---|---|
extends | o | x | x | class利用時(interface以外) | テスト対象のスタブ(モック)化 |
implements | o | o | o | interface class利用時 | テスト対象のスタブ(モック)化 ※プライベートコンストラクタとなっていて継承できないもの |
with | x | o | o | mixin利用時 | - |
class ScreenA {void checkAuth(){/**/};}
class ScreenB extends ScreenA { someFunc(){ super.checkAuth(); } }
class ScreenA(Auth auth) {/**/}
class ScreenB(Auth auth) {/**/}
手段 | 特徴 | 分離したAPIの呼び出し可能範囲 | スタブ化 | 主な用途 |
---|---|---|---|---|
移譲 | ・依存先の具象が1つ | インスタンス化された任意の場所 | x | ・1つの具象に依存しテスト時のスタブ化が不要なもの |
移譲(インジェクション) | ・依存先の具象が不特定 ・インジェクションする為のコードが増える |
インスタンス化された任意の場所 | o | ・テスト時にスタブ化やテストオブジェクトを渡したいもの ・不特定多数の具象の可能性があるもの(パッケージの開発時等) |
mixinとして分離 | ・mixin側でon句によって特定のクラスの機能を利用できる | withしたクラスのみ | x | ・特定の目的のクラスのみが利用する機能 ・特定のクラスの機能を前提にした機能 |
staticメソッドや関数 として分離 |
・任意の場所でサジェストに含まれる | 任意の場所 | x | ・副作用の無いユーティリティ系の機能 ・アプリケーション・ライブラリの初期設定やエントリポイントとなる関数 |