時間がない人のために、私は要点をすぐに言い直します。カプセル化は、いくつかの理由で主要なタスクの1つを実行しません(説明された入力と出力を持つ「ブラックボックス」を提供します)。
- プログラマは、他の人の「ブラックボックス」を信頼しません。
- 他の人々の「ブラックボックス」には、彼らの内部に入ることによって修正されなければならない(そしてこのベンチャー全体を壊す)間違いがあります。
- 入力と出力は常に明確に記述されているわけではありません。 見知らぬ人に乗る方法を理解するよりも、独自の自転車を作成する方が簡単な場合があります。
これはすべて、プログラミング理論家が無視する卑劣な現実です。 そして、それと一緒に暮らす方法は?
手がかりはありません。 ある種の「銀の弾丸」が存在することはまずありません(そして、それはどこにありますか?)。そして、それぞれの場合に、何か違うものを決める必要があります。 ストーリーは、1つの類似したケースと1つのソリューションについてです。
一度大きなプロジェクトに出くわした-それは長年にわたって多くの人々のために書かれてきました。 したがって、暗号化の精神の各タスク\解析\アーカイブ\など モジュールは長い間書かれています。 どうやら-Laf、take and use。 唯一の問題は、これらのモジュールが非常に多く、かなり前に作成されたため、作成者や実装の詳細のいずれも覚えていないことです。 古典的な「ブラックボックス」。 時には理解可能、時にはそうではない。 時々動作し、時にはバグがあります。 さて、それを使用するには?
少し考えて、使用する各クラスの「ラッパー」を作成することにしました。おおよそ次の原則に従ってください。暗号化のための巨大なクラスであり、多くのオプションと一般的なモンスターがあります。 (暗号化の深刻なクラスを見た人は誰でも、私が何を意味するか知っています-あらゆる種類の初期化ベクトル、定数など)。 対称キーを使用してファイルを暗号化および復号化するという1つの目的でのみ必要です。 それだけです。 それでは、次の2つのメソッドのラッパーを取得して作成します。
- ファイルの暗号化(何、どこ、キー)
- ファイルの復号化(何、どこ、キー)
メソッド内で、基本クラスの複雑なメソッドをプルします。 さらにコードでは、ラッパーを使用します。 利点は何ですか?
- ALIENブラックボックスに対する不信の問題は解決されました-今ではコードのどこにでもMYブラックボックスを使用しています。 彼を信じます。 それはノックアウトし始めます-私たちは暗号化の他の何らかの手段を使用するために内部を変更します(インターフェースを変更することなく)
- このような単純なラッパーの場合、すぐにテストを作成します。 暗号化-復号化-検証されたファイル:それらを書く理由。 5行のコード。 さらに、ファイル操作エラーのチェックはもう10です。その大きくて恐ろしい基本クラスのテストは受けません-長くて難しいです(その作者でさえ書いていません)。 さらに、私のテストはクラスの作成者のテストよりも優れています。たとえ彼が書いたとしてもです。 コードの作成者は常に、このコードがどのように使用されるかについてある程度の考えを持っているからです。 そして、これはコードだけでなく、テストにも反映されます。 まあ、著者は暗号化用のファイルが常に存在し、読み取り可能であると信じていたでしょう-そして、テストでこれを検証しなかったでしょう。 しかし、私はこれが私とそうではないことを知っています-そして、私は間違いなくこれらの状況をチェックします。 まあ、本当に必要だから。
- 入力と出力がより明確になりました。 まあ、少なくとも私には。 はい、他の人もそう思います。 そして、私が別のエンティティを作成したことを気にしません、古いオッカムは私を許します。
記事の終わりに、考えは私に忍び寄って、私はFowlerまたはMcConnellによる本のいくつかの章を意図せずに語り直しました。 しかし、そうではないようです(間違えた場合は正しい)。
更新:ここで、彼らは私がフォーギャングの本のファサードとアダプターのパターンについて話していることを聴衆から教えてくれます-それはそうかもしれません。
短い士気
信頼できない他の人のコードを使用する場合は、テストや実際の使用に便利なラッパーを作成します。 実際のコードで使用されるため、このラッパーをテストします。