Interface その後


この間VB.NETにおけるInterfaceについて自分で理解したことを書いたんですが、
また新たなことに気付いたので書いてみます。

よくDBに接続する場合、
  • データソース名
  • ユーザー名
  • パスワード
なんてものが必要になります。
Accessはちょっと別かもしれませんが、代表的なSQLServerOracleには
これらの情報が不可欠なわけです。

で、たとえばこれら3つのプロパティを持ったクラスを作ったとします。
Newしてそれぞれに値を設定して接続クラスへ渡す。
おそらくどのDBに対しても共通で使えるでしょう。

しかし、New時に何か処理を追加したい、たとえばApp.configにある設定を読み込ませたいなんて時、
クラスを書き換えなきゃいけない。ライブラリになってたら不可能なわけです。

それを回避するためにこの3つの項目を持ったInterfaceを公開する。
ユーザーはそれを継承し、Newにはそれぞれの処理を書き使うことができる。
接続クラス側は、このInterfaceを受け取るようにしておけば、
3つ以外の機能を付加されたクラスを渡されたとしても、関係のない項目は見ないで済むというわけです。

ただ気をつけないといけないのは、それぞれの項目の意味を違えて実装してはいけないと言うこと。
データソース名のプロパティを読んだ時にパスワードが帰ってきては話にならないわけで。
ユーザーはInterfaceの意味を勝手に変えてはいけないと言うことです。

おそらくInterfaceの本質はこっちなんでしょう。
まだまだ勉強不足です。