1

私は少し前にデザインパターンを学び始めました(これまではファサードと抽象のみをカバーしていましたが、楽しんでいます)。私は自分が抱えている問題に抽象パターンを適用しようとしています。問題は次のとおりです。1つの抽象クラスと一連のメソッドとプロパティを使用してさまざまなデータベースシステムをサポートすると、基礎となる具象クラス(抽象クラ​​スから継承)が実装されます。

DatabaseWrapper抽象クラスを作成し、DatabaseWrapperから継承するSqlClientDataおよびMSAccessData具象クラスを作成しました。

ただし、クライアントにこれらのクラスを実装する限り、パターンがどのように進むかについては、まだ少し混乱しています。

私は次のことをしますか?:

DatabaseWrapper sqlClient = new SqlClientData(connectionString);

これは私が例で見たものですが、具象クラスをカプセル化したいので、それは私が探しているものではありません。クライアントに抽象クラスのみを使用させたい。これは、クライアントへの変更を最小限に抑え、実装用の新しい具象クラスを作成することで、将来、より多くのデータベースシステムをサポートできるようにするためです。

私はまだ学んでいるので、ここで多くの問題があるかもしれません。すべての具象クラスをカプセル化する方法と、アプローチに問題があるかどうかを教えてください。

どうもありがとう!

PS:私はソフトウェアアーキテクチャに取り掛かることに非常に興奮していますが、それでも初心者なので、気楽にやってください。:)

4

3 に答える 3

2

さて、必要なのはAbstractFactoryパターンだと思います。

それ以外の:

DatabaseWrapper sqlClient = new SqlClientData(connectionString);

使用する:

DatabaseWrapper sqlClient = DatabaseWrapper.create(connectionString);

次に、静的な「create」メソッド内に作成ロジックをカプセル化します。

于 2012-09-09T03:43:24.697 に答える
1

次のようになります。

DatabaseWrapper dbClient = DBFactory.getInstance(DbType.SQL, connectionString);

ほとんどすべての設計パターンは、間接参照や抽象化の別のレイヤーを導入するだけです。この場合は、列挙DBFactory型に基づいて適切な実装を選択する抽象化レイヤーです。DbType

于 2012-09-09T03:45:08.873 に答える
0

あなたが持っているものはすでに十分です。SqlDataClient構築時にのみ結合され、その後はDatabaseWrapper他のすべてのクラス/メソッドに渡されるだけで、残りのコードはそれがであるかどうかさえわかりませんSqlDataClient

別の実装に切り替えるには、1行の構築コードを変更するだけです。

DatabaseWrapper client = new SqlClientData(connectionString);

DatabaseWrapper client = new MSAccessData(connectionString);

残りのコードは変更されずに機能します。

于 2012-09-09T08:12:11.430 に答える