我正在阅读罗伯特·罗斯尼 (Robert Rossney) 的文章“你必须维护的最不健全的程序是什么?” 发现于:(您必须维护的最不健全的程序是什么?)当我意识到我无意中开发了一个几乎相同的应用程序时!
该应用程序包含一个 HTTPListener 对象,该对象抓取传入的 POST 请求。根据标头中的信息,我将请求正文传递给 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 表中的新 Invoice Number 的值:
SELECT @NEW_INVOICE_NUMBER FOR XML PATH 'InvoiceCreateAck'
然后,我使用 C# 中的 SQL 数据读取器对象读取生成的 XML,并将其用作 HTTPListener 对象的响应。
我的问题是,我注意到罗伯特确实是正确的。我的所有应用程序逻辑都存在于存储过程中,因此我发现自己必须在存储过程中进行大量错误检查(即验证客户编号和发票编号值)。
我仍然是一名中级开发人员,因此,我正在寻求改进。鉴于原始帖子和我当前的架构,我可以做些什么不同的事情来改进应用程序?有没有我可以参考的模式或最佳实践?你会采取什么方法?我愿意接受任何和所有的批评,因为我想尽自己的一份力量来减少世界上“不健全的编程”的数量。