【问题标题】:Document displayer architectural question文件显示器架构问题
【发布时间】:2011-05-21 16:25:30
【问题描述】:

我正在考虑开发一个在线作业提交系统,学生可以在该系统上上传他们的文本文件,这些文件可以由具有查看权限的人(教师/教授)查看。此人可以注释/标记/突出显示此文档,然后可以传递此文档以供进一步审查。审核完成后,该文档将连同适当的反馈发送回学生。

这里有很多动人的部分,我很难弄清楚从哪里开始。我正在使用这个项目作为练习,使用完全开源的工具来设计一个可扩展/安全/快速的 Web 应用程序,这些工具支持类似桌面的用户体验,但除了 UI 框架(Vaadin)和语言(Java)之外,我还有一点找出在这方面取得一些进展所需的路线图有点麻烦。

如果 SO 专家能够指导我完成这件事或为我提供正确方向的推动,那就太好了。

编辑:感谢您的回复。这是响应中描述的标准三层架构。我需要大规模的可扩展性,并且由于应用程序将主要以文档为中心,并且我可能需要在以后改进搜索,所以我想避开 RDBMS。由于我们暂时有大量用户在任何给定时间发布他们的文档(比如说 *.txt)文件,我需要某种消息队列来处理这些大量信息涌入。必须有某种快速转换层,它可以获取所有格式的文档,并以适合注释和标记的格式显示它......并且列表还在继续。从域模型开始向下移动是理想的,但我有点怀疑。

【问题讨论】:

    标签: java architecture scalability rich-internet-application vaadin


    【解决方案1】:

    我是 Java 人。我将如何解决这个问题,

    1. 找出数据模型。系统将使用哪些对象。
    2. 基于该设计您的数据库。您可以使用 Ibatis 或 Hibernate 等 ORM 框架(Ibatis 有一个代码生成器,可以生成几乎所有的 DAO 来访问表。它为您提供了 CRUD 方法,您可以在其之上添加)。
    3. 完成后,您就可以开始设计服务层了。将 DAO 直接暴露给控制器(MVC 模式)并不是一个好习惯。这是您的业务逻辑应该进入的地方。
    4. 选择可用的 Web 框架之一。最流行的 Java Web 框架是 Spring MVC。您也可以试试 Google Guice。
    5. 最后一步是设计前端。我认为您的项目将包含很多 javascript。所以看看JQuery或EXT JS

    我希望这可以帮助您开始使用。

    【讨论】:

    • 感谢您的回复,但我对这种方法有一些保留意见。有关详细信息,请参阅我的编辑。
    • @sc_ray 我坚信“随心设计”。首先我想保持简单。满足您对更快响应时间的需求。您应该考虑为您的文档编制索引。查看 Solr(它是构建在 Lucene 之上的搜索服务器)。为了处理对系统的更多请求,我建议您查看消息传递服务器 (JMS)。这适用于任何实时应用程序或教室项目吗?但我很欣赏你在纸上写得正确的精力。
    • 谢谢。我将为自己的智力满足而从事这个项目。如此规模的问题将带您沿着各种不同的切线。我一定会研究 Solr/Lucene 和 JMS。我同意你的“随手设计”,只是我想知道我首先要去哪里。我试图在纸面上让它有点“正确”,因为我没有客户可以满足,也没有项目经理想在圆孔中安装方形钉。
    【解决方案2】:

    并不是真正的“完整答案”,但希望能引起一些思考。

    我正在使用这个项目作为练习,使用完全开源的工具设计一个可扩展/安全/快速的 Web 应用程序...

    这是一件很棒的事情——所以我的问题是为什么要担心架构?我承认对于一个自认为是建筑倡导者的人来说这有点奇怪,但是“学习建筑”和学习新技术都可能要求很高。也许您只是想先了解一个,然后再解决另一个?

    架构、设计和构建“可扩展/安全/快速”的系统并非易事。在“真实世界”的业务驱动案例中,您将需要适应系统上下文和需要满足的非功能性需求:这些可能暗示了不同的技术堆栈。不同的关键驱动因素将对您处理事情的方式和做出的决定产生巨大影响——当然,架构将围绕这一点构建。

    编辑:

    我会从对你来说更重要的事情开始;然后,当我开始讨论“其他”主题时,我会不断检查我学到了什么/我的假设。

    根据这两个主题,可能会有一些“协同作用”,它们建议采用不同的方法。我的一部分想建议在一个上做足够的事情以获得良好的基本掌握,然后将另一个提升到类似的水平 - 然后继续前进。这样你就更一致了。

    我的另一部分说 - 做最有趣的事!

    我应该在前进之前深入了解给定技术堆栈的深度,还是从与工具无关的角度正确获取蓝图?

    首先,您肯定希望获得一个广泛而肤浅的观点;如果它们对您特别重要,可能会更详细地介绍某些特定领域。

    或者我的蓝图会因为技术限制而改变?

    我假设您的意思是:如果您发现“给定技术以这种方式工作”以及它的工作方式与您的预期不同 - 那么这会影响蓝图吗?

    它可以做到 - 这就是为什么对相关技术的广泛而肤浅的看法应该可以帮助您避免最严重/最明显的错误错误。我还假设您有足够的整体经验来了解当您开始执行此操作时所关注的内容 - 您可以识别出需要在进行设计之前进行更详细研究的领域。

    在高层次上,您要做的就是确保您不会限制更多选项。

    【讨论】:

    • 感谢您的回复。你提出了一个很好的观点。这个项目的好处是,由于这既不是课堂项目也不是现场部署的工作,因此我比需要遵守企业组织约束的开发人员/架构师有更多的余地。这在某种程度上变成了“先有鸡”的场景。在继续前进之前,我应该深入了解给定技术堆栈的深度,还是从工具不可知论的角度来获得蓝图?还是我的蓝图会因为技术限制而改变?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2010-12-28
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多