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