docs

TOP(About this memo)) > 一覧(Dart) > (IMO)拡張や実装やclass修飾子の使い分

拡張, 実装, class修飾子の使い分け

classの修飾子とmixinの使い分け

extends, with, implementsの使い分け

コンストラクタの再利用 多重継承・実装 列挙型からの利用 主な用途 主な用途(テスト)
extends o x x class利用時(interface以外) テスト対象のスタブ(モック)化
implements o o o interface class利用時 テスト対象のスタブ(モック)化
※プライベートコンストラクタとなっていて継承できないもの
with x o o mixin利用時 -

列挙型の活用

too muchな継承の利用方法

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 ・副作用の無いユーティリティ系の機能
・アプリケーション・ライブラリの初期設定やエントリポイントとなる関数