xml、my.settings?走哪条路?

xml, my.settings? Which way to go?

在网上搜索了将近 3 天后,我决定 post 在这里,因为我自己似乎无法找到它。我在 Visual Basic 方面的技能非常有限,但我正在学习。

我的目标是编写一个程序,能够分析孩子们在高中所做的测试。我在 VBA 中完成了第一个版本,效果很好,但我想创建一些不依赖于 Excel 的东西,因此我正在使用 .NET 版本。

在我看来,我需要首先完全指定一个测试。年份、级别、问题数量、每个问题的最高分数以及指定哪个问题属于哪个问题的方法 chapters/skills。 (例如,对于我的物理 classes,章节​​可以是 electricity/forces/pressure,技能可以是 reproducing/insight/usage 公式等。用户应该可以自由指定这些,以后 select哪个题属于电、力等)

之后,必须有可能添加 class 来对每个学生的每个问题进行评分。必须可以向一个测试添加更多 classes,因为碰巧有多个 classes 进行相同的测试。我可以通过 xml 导入 classes,因为它们可以从我们学校的数据库中生成。

读出这一切还在遥远的未来……

到目前为止,我有一个表单,其中包含一些组合框、一些单选按钮、一个文本框和在 运行 时间内生成的 textboxes/checkboxes。

我需要能够保存用户输入的设置,因为它们将定义测试的所有参数。正是这个节省部分让我感到困扰。我不确定该走哪条路。

我看到有人用my.settings的方式保存设置。这似乎是一个不错的选择,尽管我将不得不研究一下如何使用动态生成的文本框和复选框来实现它。

另一方面,我一直在尝试将所有内容保存到一个 .xml 文件中。我不知道 .xml 文件格式是否对这类事情很方便,它必须包含 tables 的分数、控制值等。如果有可能拥有一切我想要一个 xml 文件(无论用户希望添加多少 class 的测试参数和测试结果),那将是惊人的。另一方面,my.settings 似乎是一种更简单的保存设置的方法,但我将不得不接受一个单独的 .xml 文件,其中包含用户必须加载的所有乐谱数据进入程序。我希望所有这些都有意义...

有没有人可以给我一些建议?并没有真正询问如何编写所有这些代码,只是在努力解决我将如何实现应用程序的保存和加载功能的结构。如果我能得到它(保存并加载用户输入)它会让我开始,但我害怕以错误的方式开始。

谢谢 :-)

编辑:

更清楚地了解我想要实现的目标:

孩子们在纸上做测试。

*老师在程序中输入测试名称。

*老师在程序中输入问题的数量。

*老师在程序中输入测试包括哪些章节,以及哪些技能(例如"Forces"或"WWII"。技能可以是"Grammar"或"using formula's")。这些技能和章节在文本框中输入并输出到标签。

*老师给出每题的最高分。

*程序在每个标签后生成一行带有复选框的行。复选框的数量对应于问题的数量。

对于包含 9 个问题的测试,输出可能是这样的

力 □ □ □ □ □ □ □ □ □

压力 □ □ □ □ □ □ □ □ □

等(文本框甚至可能在 table... 中生成,这可能更容易检索:-)

*老师select将属于其前面标签类别的问题打勾。

这样就完成了测试配置。这意味着必须保存控制值。我面临的挑战是加载值,因为几乎所有复选框都是在 运行 时间内创建的。

老师的下一步是将 class 加载到程序中。 classes 以 xml 格式提供,我能够将它们导入数据网格视图以输入每个学生每个问题的分数。

class结果应该可以保存,实际上不将它们全部添加到测试配置文件中似乎更方便,而是将它们作为文件夹中的单独文件。该程序可以在用户不知情的情况下生成该文件夹。我已经添加了 classes 的列表框以供选择。

那么这一切的读出应该是一个图表。首先是老师 select 的 class,然后是下拉菜单中的学生。最终结果应该是一个图表,以百分比显示孩子在老师在第一步中指定的每个类别。

我在 VBA 中完成了这一切,它看起来很漂亮。我发现它的编程非常有趣,所以我决定尝试使用 .NET 版本:-)

由于这是一个非常开放的问题,我不确定您是否可以使用我的答案。但我愿意试一试。

首先My.Settings是一个VB选项,C#没有。因此,如果您想将您的解决方案移植到 C#,这会让事情变得困难。其次,My.Settings 只是使用 App.Config 文件的简单重载。您可能已经了解 My.Settings 用于配置您的应用程序。你问的不是真正的配置,虽然动态文本框在灰色区域。

尽管如此,我的直觉告诉我 My.Settings 不是正确的选择。

文件格式(xml、json、文本、二进制、数据库等等)实际上并不那么有趣。我认为设计要重要得多。

如果我理解正确的话,你有一个测试学生的动态设置。而测试的框架对于各种问题都是一样的?!即具有多个问题的测试,其答案是预定义的。 但并非所有(类型的)测试都将一次性加载,更不用说所有学生都将在一次测试中加载?!因此,将所有这些信息存储在一个文件中对我来说听起来很奇怪。 请记住如果应用程序增长并且您只有一个文件会发生什么:这将是真正的问题(还有更多!!): - 你弄丢了一个文件! - 单个文件会损坏 - 当加载需要几分钟时,单个文件会增长到一定大小 - 多个用户同时保存(或加载)信息。您将如何防止这种情况,甚至更具挑战性的控制这种情况?

我会围绕一堆 SOLID classes (poco 对象来设计应用程序):

  • A class 定义测试(从这里你可以生成你的输入表单)
  • Aclass定义单题(参考测试)
  • A class 定义 class
  • A class 定义学生(引用 class class :-)
  • A class 定义每个问题的结果(从而引用学生和问题)

使用此设置,您可以简单地将 classes 序列化为您选择的文件格式,并以结构化方式存储它们。您可能需要考虑命名约定 and/or 目录结构。您让用户不通过 windows 资源管理器或其他方式自行打开这些文件,而是让您的应用程序的 use case 决定需要加载哪个文件。

我更喜欢使用 json,因为它使用起来非常简单,尤其是使用 NewtonSoft json serializer 时,您可以从 NuGet 中提取解决方案。

输入完所有这些后,我认为当您的目标与您描述的一样大时,您应该直接从使用数据库开始。使用 Entity Framework Code First and SQL local db 这很容易做到。它会为您提供查询的所有好处,并且很容易移植到 SQL 服务器以防应用程序变大。