gpt4 book ai didi

c# - LINQ to XML、ORM 或其他 "Completely Different"?

转载 作者:行者123 更新时间:2023-11-30 13:53:19 24 4
gpt4 key购买 nike

我正在开发一个具有所有特性和限制的 Silverlight 项目。这是对以前产品的更新。为了快速进入市场,其目的是尽可能多地维护后端(网络服务、数据库等)。我们的任务是只有在没有其他方法的情况下才接触后端。我们将主要专注于重写前端。不久将举行一次重要的行业 session ,我们将在会上演示产品的早期外观。正式发布之前可能有时间做一些返工,但后端可能需要等到V2。

好的,所以我要做的是对我负责的前端使用带有数据绑定(bind)的 MVVM 模式(MVVM 模式由上面规定)。我有一个提供一些 XML 的预先存在的 Web 服务。该 XML 的示例如下所示:

<CODEBOOKINDEX>
<ME Words="1" Score="25" Highscore="1">Main Entry Item
<NM>attack</NM>
<NM>cardiac</NM>
<NM>chest</NM>
<NM>effort</NM>
<NM>heart</NM>
<NM>pectoris</NM>
<NM>syndrome</NM>
<NM>vasomotor</NM>
<IE>413.9</IE>

<M1 Words="1" Score="25">An M1 Item (Same as ME, just first level Child)
<IE>557.1</IE>
</M1>

<M1 Words="1" Score="25">Another M1 Item
<IE>443.9</IE>
<M2 Words="1" Score="25">An M2 Item (again same as ME, just a child of an M1 item)
<CF>Arteriosclerosis,extremities</CF>
<IE>440.20</IE>
</M2>
</M1>
</ME></CODEBOOKINDEX>

所以,我的问题是,因为我想使用 MVVM 模式将它绑定(bind)到 UI,所以在我看来我需要将它转换为自定义对象。如您所见,有许多“条目”项,MainEntry (ME) 和 Subentries(本例中为 M1 或 M2),它们都包含某些其他节点(例如,它们都有一个 IE 节点),它们可以包含 0 个或多个其他节点类型(例如,它们可以包含也可以不包含一个或多个 NM 节点,或者它们可以包含一个 CF 节点,也可以不包含)。 Whihc 意味着(至少对我而言)我不能真正直接绑定(bind)到 XML,因为:

  1. 它违反了 MVVM 模式(我可能可以为演示证明这一点,但稍后必须重构)。
  2. 我无法真正将 UI 元素绑定(bind)到给定项目可能不存在的 XML 节点。
  3. 在某些情况下,我必须将一个集合(例如,一堆 NM 项目)转换为格式化的 strig 以供显示,我认为这不是一件小事。

因此,我试图了解将此 XML 转换为可绑定(bind)对象的最佳方法,在我看来,这意味着将此 XML 转换为模型的对象,然后在该模型上覆盖 View 模型。

这可以通过 LINQ to XML 查询轻松完成,还是我真的进入了 NHibernate 或 Entity Framework 之类的 ORM 领域(请不要就 WHICH ORM 展开圣战)?
我刚刚确定了将用于 UI 的控件,我需要快速向我的经理展示如何我将处理翻译。

所以,真正的问题是:

  1. 需要 ORM 吗?我不反对使用它们,但我希望 XAP 文件的大小保持较小,并希望限制我(和我的队友)一次学习所需的新技术数量。
  2. 如果我确实需要一个,我能否将文件大小保持在较小的水平,我能否使用 EF 或 NHibernatge 快速提升并尽快展示一个模型?我在这里说了大约一个星期的时间来一些东西,它会从网络服务中获取输出并将其转换为一个对象,即使 map 最初并不完美,我也需要展示一些进展。
  3. 是否还有其他我没有考虑过的选择,它可能更容易,限制修改现有代码(即网络服务)和产品可用结果的需要?

最佳答案

Do I NEED an ORM?

没有。您没有映射到关系源,因此对象关系映射器无济于事。


使用 Linq to Xml 完成它.

public CustomClass TranslateME(XElement source)
{
CustomClass result = new CustomClass();
result.Words = (int) source.Attribute("Words");
result.Score = (int) source.Attribute("Score");

XAttribute highScore = source.Attribute("HighScore");
result.HighScore = (highScore == null) ? 0 : (int) highScore;

result.NMs = source
.Elements("NM")
.Select(x => x.Value)
.ToList();

result.IE = source
.Element("IE").Value;

result.SubEntries = source
.Elements("M1")
.Select(x => TranslateM1(x))
.ToList();

return result;
}

关于c# - LINQ to XML、ORM 或其他 "Completely Different"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com