しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

完全コンストラクタという良さ気な設計方法

完全コンストラクタという概念を知ったのでその事について書いてみます。

完全コンストラクタとは

インスタンスの初期化時に全てのプロパティーが決まってその後変化しないようにする事です。
具体的には下のようなクラスを指します。

valueの値は初期化時に決まり、その後変化する事はありません。

class MyClass {
    private let value: String
    
    init(value: String) {
        self.value = value
    }
}

完全コンストラクタのメリット

完全コンストラクタのメリットは安全性です。
初期化時から内部の状態が変化しない為、メソッドは常に同じ結果を返しますし変数の妥当性チェックも初期化時にだけ行えば済みます。

クラスにオプションを付けたい場合はどうするか

下のような内部のプロパティーが特定の文字列を含むか検索するようなクラスを考えます。
こういったクラスがある場合、ignoreCaseのようなオプションを付けたくなります。

そういった場合はクラスを分割してignoreCaseなクラスとignoreCaseでないクラスの2つを作ると良さそうです。

class MyClass {
    private let value: String
    var ignoreCase = false
    
    init(value: String) {
        self.value = value
    }
    
    func include(str: String) {
        // ...
    }
}

参考URL

いまさら聞けない「オブジェクト指向設計の3つのコツ」~オブジェクト指向設計問題解説 #objectoriented - CodeIQ Blog
現場で即実践できるオブジェクト指向設計について学んでみよう〜オブジェクトの生成と目的に応じた部品作り #objectoriented|CodeIQ MAGAZINE