为在同一文件中工作的多个用户寻求有关设计的建议

本文关键字:用户 文件 工作 | 更新日期: 2023-09-27 18:31:39

我正处于编写桌面应用程序供多个用户使用的最早阶段。 我正在寻找有关解决此问题的最佳方法的建议。

规格

我将把我的模型保存在一个文件中,该文件通常会在映射的网络驱动器上使用。 (它用于设计道路和其他线性要素,如铁路和溪流。

不同的最终用户需要能够同时连接和编辑文件。 例如,比利·鲍勃(Billy Bob)正在研究名为US321的道路,而鲁珀特(Rupert)正在研究I40。 每条道路的模型位于同一文件中。 最终用户可以"声明"任何道路名称,其中只有声明者才能编辑给定的道路。 Rupert 无法编辑 US321,而 Billy Bob 声称它,但 Rupert 可以阅读 US321 以供参考。 用户编辑完道路数据后,他可以发布索赔,其他人可以对其进行编辑。

序列化的限制?

我对序列化的理解非常有限(请参阅我的个人资料)。 但在我看来,对象和序列化文件之间存在一对一的关联。 因此,如果我使用序列化来实现这一点,则不可能只声明其中的一部分,也不可能只更新其中的一部分。 (这是对的吗? 如果没有,那么我可以使用序列化,对吧?

我正在考虑的解决方案

我正在考虑使用 SQL Server Express,我对社区对此的警告、更正或肯定感兴趣。

最终用户不必知道我在后台使用 SQL Server Express。 (我什至会将文件扩展名更改为适合我的应用程序的内容。 我会将道路加载到列表中,每条道路都是"可认领的"。 声明一条道路会在数据库中标记它,以便应用程序的其他实例做出相应的反应,有点像它是一个共享的 MS Excel 文件,多人可以同时编辑,但(类似于 Excel)能够锁定单个工作表。

[编辑] 见下面Micah Armantrout非常翔实的回应。 所以现在我想如何使用Microsoft Access作为中介数据库应用程序。

[编辑]

结论

感谢大家的有用回答和评论。 Micah 的回答非常有帮助,因为我没有意识到我只会被一台服务器控制的文件。 虽然现在说得很有道理,但我没有预料到,如果我走那条路,在朝那个方向工作了几个小时后,我就会搁浅。

当我第一次读到乌尔巴达夫的想法时,我把它当作我已经考虑过但不喜欢的东西。 但仔细想想,这显然是最简单的方法。 我只是使用一个目录,就像它是一个文件一样,但对我的顶级子对象具有用户透明度。 但显然有一种吸引力,那就是将我的整个模型封装到一个文件中。

这就是我决定做的:从写入目录开始,就像 urbadave 建议的那样。 然后测试将其放在zip目录中,并使用ZipPackage类提取并插入单个序列化文件(或XML文件 - 我有一天必须做出的另一个决定)。

  • 保罗

为在同一文件中工作的多个用户寻求有关设计的建议

SQL服务器将适用于您正在寻找的内容,但是如果您要有多个用户,则需要具有计算机设置才能成为服务器。在每台计算机上安装sql server express对您没有任何好处它可能是用户计算机之一,也可能是具有SQL server express的实际服务器,您需要将其设置为可在当前计算机之外访问才能按照本教程进行操作。

如果您使用的是Windows XP SP2之后的任何内容,则需要按照以下说明打开防火墙的端口,这也在下面的链接中进行了讨论。

http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx

就共享数据而言,我的意思是看到其他人工作。如果您不想在服务器上安装sql服务器,则可以使用MS Access,我会向您推荐一篇文章,以便在以下情况下使用哪一个

http://www.techrepublic.com/article/should-you-use-sql-server-express-edition-or-microsoft-access-for-your-small-business-applications/6140859

虽然我在工作中可以访问一个不错的数据库,但我的大部分个人编程都不使用数据库。 我过去使用的技巧之一是文件扩展名旨在承载意义。 在您的情况下,您可以利用文件扩展名来指示声明并控制对主文件的写入。

您是对的,您可能希望将每个道路对象序列化为其自己的文件。 主文件将是包含所有这些单独道路对象的集合对象的序列化。

用户选择并打开这些道路文件。 在打开文件之前,用户的应用会重命名文件,并添加扩展名(可能是用户的 ID)。 这样,您可以使用目录扫描来查找已声明和未声明的文件。

仅当用户在

他们正在处理的道路上发布其声明时,才会写入主文件。 用户的应用程序打开所有道路文件,使用道路对象组装主对象,然后将此对象序列化为主文件。 完成后,用户应用通过重命名道路文件来释放用户对道路文件的声明。

在写入主文件之前,用户的应用会重命名该文件,指示该文件即将写入。 如果用户应用需要写入,它可以检查文件是否已重命名,并等待文件名还原为可写名称。

这是我如何攻击这个规范的草图。 祝你好运。