Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 犯了错误的程序设计罪_C#_Sql_Xml_Stored Procedures_Anti Patterns - Fatal编程技术网

C# 犯了错误的程序设计罪

C# 犯了错误的程序设计罪,c#,sql,xml,stored-procedures,anti-patterns,C#,Sql,Xml,Stored Procedures,Anti Patterns,我在读罗伯特·罗斯尼关于你必须维护的最不健全的程序是什么?发现于:当我意识到我无意中开发了一个几乎相同的应用程序时! 该应用程序由一个HTTPListener对象组成,该对象捕获传入的POST请求。根据标头中的信息,我将请求主体传递给SQL Server以执行适当的事务。 请求如下所示: <InvoiceCreate Control="389> <Invoice> <CustomerNumber>5555</CustomerNumb

我在读罗伯特·罗斯尼关于你必须维护的最不健全的程序是什么?发现于:当我意识到我无意中开发了一个几乎相同的应用程序时! 该应用程序由一个HTTPListener对象组成,该对象捕获传入的POST请求。根据标头中的信息,我将请求主体传递给SQL Server以执行适当的事务。 请求如下所示:

<InvoiceCreate Control="389>
  <Invoice>
    <CustomerNumber>5555</CustomerNumber>
    <Total>300.00</Total>
    <RushOrder>1</RushOrder>
  </Invoice>
</InvoiceCreate>
然后,我在同一存储过程中使用另一条SELECT语句返回插入到发票表中的新发票号的值:

SELECT @NEW_INVOICE_NUMBER FOR XML PATH 'InvoiceCreateAck'  
然后,我使用C中的SQL数据读取器对象读取生成的XML,并将其用作HTTPListener对象的响应

我的问题是,我注意到罗伯特确实是对的。我的所有应用程序逻辑都存在于存储过程中,因此我发现自己必须进行大量错误检查,即验证存储过程中的customer number和invoicenumber值


我仍然是一名中级开发人员,因此,我希望改进。考虑到最初的帖子和我目前的架构,我可以做些什么来改进应用程序?是否有任何模式或最佳实践可供我参考?你会采取什么方法?我愿意接受任何和所有的批评,因为我想尽自己的一份力量减少世界上不合理的编程数量。

不确定具体的模式,但你需要定义你的层并坚持下去。我在这里使用的图层非常松散。您有一个层需要解析XML。您有一个读取HTTP请求的层。您有一个层进行数据访问。如果您使用的是C,那么可能有3个独立的类

我不会在存储过程中这样做。根据我的经验,如果您更改了数据库,那么做这些工作几乎就是完全重写。测试也很难

对于数据访问,您仍然可以使用存储过程。我个人只会使用C编写简单的insert语句。我只会努力将任何业务逻辑排除在存储过程之外。保留任何业务逻辑,在C中解析,因为这将更容易在以后移植

祝你好运

SELECT @NEW_INVOICE_NUMBER FOR XML PATH 'InvoiceCreateAck'