2009-05-29 8 views

答えて

10

私はこの分野の専門家から遠く離れたんだけど、それはOKだ場合、私は...DbCommandBuilderこととその継承クラス(OdbcCommandBuilderOleDbCommandBuilderは、SqlCommandBuilder)は一例かもしれないと思うことも抽象ビルダーベースクラス監督を務める。その後、(リフレクターあたり)これらのようなメソッドを呼び出して、その基底クラスへの様々な具象クラスのデリゲート:

  • 抽象ビルダークラス
  • private DbCommand BuildDeleteCommand(DataTableMapping mappings, DataRow dataRow) 
    { 
        DbCommand command = this.InitializeCommand(this.DeleteCommand); 
        StringBuilder builder = new StringBuilder(); 
        int parameterCount = 0; 
        builder.Append("DELETE FROM "); 
        builder.Append(this.QuotedBaseTableName); 
        parameterCount = this.BuildWhereClause(
         mappings, dataRow, builder, command, parameterCount, false); 
        command.CommandText = builder.ToString(); 
        RemoveExtraParameters(command, parameterCount); 
        this.DeleteCommand = command; 
        return command; 
    } 
    

    これはビルダーであることを要件の一部を満たし

  • コンクリートビルダークラス
  • 種々DbCommandBuilderに方法で、複雑な多段階建物(BuildDeleteCommandBuildInsertCommandBuildUpdateCommand
  • など、それは潜在的にタイムアウト、コマンドの種類、トランザクションを持っているので、単にSQL文字列よりも複雑である
  • 製品(DbCommand、具体的なクラスで特定のコマンド型にキャスト)、

しかし、監督を務める別のクラスはありません。実際にはDbCommandBuilderの基本クラスがディレクターです。

2

複数のコンクリートビルダー?私が知っているわけではありませんが、それはかなり些細なことであるWebRequest.Createを数えるのでなければわかりません。

ProcessStartInfoおよびStringBuilderはどちらも単純な "ビルダー"の例として妥当です。

+1

WebRequest.Createはビルダーではなく、ファクトリメソッドです。 FTP URLを渡してHTTPWebRequestを返すことはできません。 –

+0

私は実際に、「共通ビルダー」パターンの例として、私の注釈でマークされた他の2つのクラスを持っています。このバージョンでは、SOAPとBinary Formatterを使用しようとしましたが、彼らはディレクターのコンポーネントがないようです。 –

関連する問題