c# - 设计面向对象的数据库调用而不是基于字符串

标签 c# xml oop data-access-layer strong-typing

相关

Design Strongly typed object from XML

目前我们运行基于“SQL XML”的存储过程,其中我们发送xml字符串作为存储过程的输入,并从存储过程中获取响应作为 xml。对于用户登录应用程序的简单演示,这里是如何完成的

<Request Type="" CRUD="C/R/U/D">`
<Users>
<UserName></UserName>
<Password></Password>
</Users>
</Request>

不要介意数据库的响应,因为我们可以更改为我们想要的任何内容。正是这种 xml 的构造让我们觉得太吓人了。下面是我们遵循的代码

StringBuilder _sbXml = new StringBuilder();
_sbXml.AppendLine("<Request Type='' CRUD=''>");
_sbXml.AppendLine("<Users>");
_sbXml.AppendLine("<UserName>"+ usernameVariable +"</UserName>");
_sbXml.AppendLine("<Password>"+ passwordVariable +"</Password>");
_sbXml.AppendLine("</Users>");
DataTier.BeginRequest(_sbXml.ToString());

我们尝试将事物抽象为方法,但我们还是没有解决我们想要解决的问题,只是将它们隐藏在某个地方。

So we concluded that strong typing is necessary for each request to avoid any typo's,undesired behavior, avoid hand coded xml and maintainable

.因此问题

  • 我如何抽象出这种构建 xml 的形式

  • XSD工具可以生成类建模xml数据(相关帖子),使用自适应工具生成的类是否可以长期运行?

  • 将字符串 xml 抽象为类型化类是否可取?有没有人成功地完成了我现在正在尝试做的事情?您觉得哪一个更合适?

更多

以上只是一个单一的数据库调用,我们对所有的数据库调用都是一样的。我们肯定会陷入困惑的维护之中。

额外

  1. 使用 C# 2.0

  2. .NET 2.0

  3. SQL Server 2005

  4. Visual Studio 2005

最佳答案

这里有两个问题:

  • 您正在使用 XML 将参数传递给存储过程,而存储过程可以在不使用中间层的情况下以完全正常的方式获取参数
  • 您正在手工构建您的 XML。请不要那样做 - .NET 有 大量 好的 XML API,即使使用 .NET 2.0 意味着您不能使用 LINQ to XML。

所以,我建议:

  • 如果可能的话,去掉 XML 层。我意识到这可能不可行。
  • 使用 XmlDocument 等 API 构建 XML
  • 您当然不希望构建 XML 的代码乱七八糟——您的帖子中并不清楚您是否需要为此使用多种不同的类型;这将取决于您的要求有多少不同。

(您所说的“我们得出的结论是一个类可以解决问题”或“我看到了相关的帖子和​​生成的类”并不是很清楚您的意思,所以我可能没有理解这一点。如果是这样,请编辑您的需要澄清的问题。)

关于c# - 设计面向对象的数据库调用而不是基于字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8178992/

相关文章:

java - Android - 自定义 View 边框

xml - Xpath 查询以匹配序列中的直接兄弟节点

java - 静态ArrayList有多贵?

flutter - 在 DART 中 - toList() 方法不会将 int 的 Iterable 转换为列表,但是当它应用于 print() 内部时,它可以正常工作。为什么?

c# - 我如何使用 linq 将字符串日期时间解析为实际日期时间?

c# - 类层次结构的适当设计

c# - 内部类中接口(interface)的扩展方法

c# - 将 Entity Framework 实体映射到 POCO 并维护层次结构

java - XPath Count 函数始终返回 0.0

Java通过 protected getter访问私有(private)父类(super class)成员