2012-12-17 17 views
3

我有一个应用程序,我需要用户Obs​​erver来解决。由于代码实现很长,我想总结一下这个问题。使用Observer和Observable解决应用程序

我开始申请。

我有一个LogInWindow,我可以选择司或学生。

秘书可以为给定课程的学生添加学生,课程和成绩。 学生只能看到其结果。

我需要使用Observer,这样如果一个秘书登录到该应用程序的一个实例中,并且学生在该应用程序的另一个实例中登录,当秘书在该课程中为该学生添加结果时,该学生看到立即在其名单上列出新课程及其结果。

从txt文件中读取数据。

我的解决方案。 SecretaryWindow是观察员 StudentWindow是观察员 ResultRepositoryFile是可观察对象

当我点击Add按钮的控制器中添加一个结果(studentName,courseName,结果)的ResultRepositoryFile。 SecretaryWindow观察者认为,打印一条消息并保存包含ResultRepositoryFile的txt文件。

现在StudentWindow我点击一个RefreshButton和ResultRepositoryFile在列表中重新加载从这个窗口,显示出新添加的Result.class

这是做正确的方式,因为我有疑虑。

如何使用Observer同步同一应用程序的两个实例?

感谢您的阅读,并希望您能帮助我。

回答

3

如果您打算让多个人同时使用您的应用程序,则应该使用数据库而不是文本文件。如果不止一个人同时写入文本文件,文本文件可能会损坏。

我建议像MySQL这样的关系数据库。

由于您的学生窗口有一个刷新按钮,您的学生窗口将始终从数据库中提取最新的数据。

当秘书向数据库添加结果时,数据库将会锁定,并且不允许任何人访问该结果,并且只有在添加提交到数据库之后才会导致结果。数据库允许秘书在添加结果的同时访问其他结果。

除非您想要通知学生秘书已将结果添加到数据库,否则您不需要Observed和Observable。

编辑补充:

书记窗口观察到的,并且可观察的是结果,局长已添加到文本文件。

学生窗口基于Observable更新窗口。秘书窗口必须能够根据结果的学生ID访问学生窗口实例。

+1

+1。很好的建议使用MySQL而不是文本文件。你认为这很重要,你错了。这实际上比这更重要;)。另外,我认为Observable模式的使用在这里是强制性的(我怀疑它在要求中)。 –

+0

感谢您的建议,但不幸的是,数据是从txt文件中读取的,Observable的使用是强制性的(分配要求)。 – Mythul

+0

感谢您的建议,但不幸的是,数据是从txt文件中读取的,使用Observable是强制性的(分配要求)。我只是不知道如何实现StudentWindow的“更新”,以便秘书为该学生添加新的结果时,结果自动出现在该StudentWindow上,而无需按下RefreshButton。或者需要某种刷新输入?该应用程序有两个主线,其中一个在其他StudentWindow上拥有SecretaryWindow,而不是txt数据文件,它们是唯一共同的东西?谢谢您的帮助。 – Mythul

1

我觉得你有点热衷于使用观察者设计模式。你没有阅读设计模式,你将如何实现它。这里是我会解决这个问题的方式。学生将添加标志结果并添加结果对象的关联当为sethratary添加结果 对于某个主题,他会发现所有登录的学生已选择要为哪个秘书添加结果的主题,并简单地标记结果标志 为真(显然文本文件/数据库也需要更新)。这是这种情况,当你不想打到DB /文件只是为了获取结果是否被添加,可能是 由于某些性能因素。现在当学生刷新页面时,他可以简单地从结果对象中取出而不是从数据库中取出。 个人我宁愿发射阿贾克斯电话(基本上是投票),而不是刷新

相关问题