Robert Rossney の「維持しなければならなかった最も不健全なプログラムは何ですか?」というエントリを読んでいました。(あなたが維持しなければならなかった最も不健全なプログラムは何ですか? )で見つけました。
このアプリは、着信 POST 要求を取得する HTTPListener オブジェクトで構成されています。ヘッダーの情報に基づいて、要求の本文を SQL Server に渡し、適切なトランザクションを実行します。
リクエストは次のようになります。
<InvoiceCreate Control="389>
<Invoice>
<CustomerNumber>5555</CustomerNumber>
<Total>300.00</Total>
<RushOrder>1</RushOrder>
</Invoice>
</InvoiceCreate>
HTTPListener オブジェクトによって受信されたら、ストアド プロシージャを介して SQL Server の組み込み XML 処理機能を使用して、Invoice テーブルに対して必要な INSERT を実行します。
INSERT INTO Invoice (InvoiceNumber, CustomerNumber, Total, RushOrder)
SELECT @NEW_INVOICE_NUMBER,
@XML.value('(InvoiceCreate/Invoice/CustomerNumber)[1]', 'varchar(10)'),
@XML.value('(InvoiceCreate/Invoice/Total)[1]', 'varchar(10)'),
@XML.value('(InvoiceCreate/Invoice/Total)[1]', 'varchar(10)')
次に、同じストアド プロシージャで別の SELECT ステートメントを使用して、Invoices テーブルに挿入された新しい請求書番号の値を返します。
SELECT @NEW_INVOICE_NUMBER FOR XML PATH 'InvoiceCreateAck'
次に、生成された XML を C# の SQL データ リーダー オブジェクトを使用して読み取り、それを HTTPListener オブジェクトの応答として使用します。
私の問題は、Robert が確かに正しいことに気付いていることです。アプリケーション ロジックはすべてストアド プロシージャ内に存在するため、ストアド プロシージャ内で多くのエラー チェック (つまり、顧客番号と送り状番号の値の検証) を行う必要があります。
私はまだ中級レベルの開発者なので、改善を目指しています。元の投稿と私の現在のアーキテクチャを考えると、アプリケーションを改善するために別の方法で何ができたでしょうか? 参照できるパターンやベスト プラクティスはありますか? どのようなアプローチをとったでしょうか?世界中の「不健全なプログラミング」の量を減らすために自分の役割を果たしたいので、私はどんな批判にもオープンです。