【发布时间】:2012-09-06 00:33:45
【问题描述】:
最近我们一直在想,人们发现什么最适合将您的业务对象/实体保存到数据库中。出于讨论的目的,考虑一个包含一些项目(客户详细信息、名称、数量、价格等)的订单示例。我们正在使用 SQL Server 和 C#,并且有一些旧的 ASP Classic/Jscript 用于旧项目,并且没有机会转向 NoSQL 类型的解决方案等。
我知道的大致有三种方式
在服务器端创建即席 SQL 查询(似乎更慢 + 更脆弱,如果您更改服务器端语言,则必须重新创建所有这些代码)
使用接受 XML 表示的订单的存储过程,然后存储过程将读取文档并执行任何需要执行的操作。 (这是我们目前使用的方法)
使用某种 ORM 技术(我知道有些人对此深信不疑,但我们宁愿避免使用它,因为我们没有足够的经验来准确判断它是否是我们想要走的路,并且有足够多的关于性能问题和复杂性的讨论,考虑到其他一切都在发生,采用 KISS 理念,我们在承诺它时有点紧张)
我想知道的是:
是否有人有任何其他/更好的方法不在我们可以调查的上述列表中
XML 方法是否是标准/良好做法。我们喜欢它,因为大多数语言都支持序列化为 XML,它对 Web 友好,在调试期间易于阅读且非常灵活(易于扩展,可以通过模式选择强弱等),但希望有机会考虑其他想法。
注意:Using OPENXML in SQL Server 2008 stored proc - INSERT order differs from XML document 在某些方面似乎是相关的;到目前为止,我们已经使用了 openxml(),所以我想要问的问题是 XML 方法是否是一种合理的方法,XQuery 是更好的方法吗?是否有人可以在灵活性、可读性等方面指出以这种方式做事的真正最佳方式的方便参考/帖子。
编辑: 感谢大家的回复。即使这已经关闭,我也会做出回应(仍然不清楚为什么在 StackOverflow 上禁止讨论)。抱歉耽搁了一段时间。
我可能应该澄清一下;我们发现 XML 有用的地方是当我们有一个由几个较小的业务对象组成的“复杂”对象时。例如带有 "items" 的订单;可能有一个或多个项目。如果我们加载一个订单,然后用户将一个项目添加到他们的订单中,我们只需附加另一个项目,序列化为 XML,然后将其传递给存储过程,该存储过程可以确定它是插入还是更新,而我不是确定你会怎么做(除了我会避免的很多小存储过程/adhoc SQL。ORM:见下面的评论)。如果我们正在处理一些相当于插入/更新行的平面结构,那么具有强类型参数的常规存储过程就可以很好地工作。
至于其他关于 ORM 的 cmets;我发现 Martin Fowler 的文章的链接很有趣。我已经阅读了原版http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx 一段时间,但总是很欣赏更多信息。目前,我对 ORM 的主要关注只是学习使用它的复杂性,并且很好地使用它(避免陷阱等),鉴于我们正在使用的当前环境看起来有点难以处理。
但是感谢您的回复;只是想看看是否还有其他我们可能错过的方法。看起来 ORM 是值得花一些时间在一边的。
再次感谢。
-马辛
【问题讨论】:
-
XML 变体很有趣,对于新项目,我们在单独的 C# 项目中有业务逻辑,我们计划有 SaveAggregateEntity 过程,它将接受表属性作为输入,然后在过程中我们将执行合并与聚合实体相关的每个数据库表的语句。我很好奇这种方法将如何发挥作用。
标签: sql-server xml stored-procedures maintenance