如果您在所有10篇博客文章中都遵循了该系列文章,那么我非常感谢! 感谢您在我记录我们的项目和代码时的阅读。 从对Marvel API的分析和对项目方向的评估,到在网页中构建最终的UI组件,此过程不仅暴露了填充数据库和构建非常简单的全栈应用程序所需的时间和精力,而且还暴露了所需的时间和精力。如何专注于项目目标。 在这篇文章中,我们要讨论剩下的3个主题。
- 项目的未来-新增功能,改进的功能,更多的功能
- 获得的经验教训—哪些对我影响最大
- 资源-从代码到基础,在哪里可以找到信息
项目的未来
从一开始,我们就将该项目设计为演示文稿的演示。 但是,当我们开始构建应用程序时,我认为我们开始意识到数据可以支持比我们最初意图更复杂,更有趣的应用程序。 我们显然不能(也不希望)为演示目的构建这样的应用程序,但是在演示完成之后,它引发了许多继续该项目的想法。
资料清理
首先,我们可能会花费大量精力和大量时间来清理API中的数据。 Marvel的API中有多个字段和值,直到它们出现在我们的数据库中,我们才知道它们是无效的。 在API中可能还需要进行一些额外的探索才能找到这些不一致和损坏的图像,但是由于数据所有者并不是数据的完美管理者,因此我们可以最终改善数据完整性。
如果存在无法清除的某些值,那么我们可能需要探索更好的方法来处理前端的值。 毕竟,大多数网站已经将注意力集中在优雅地失败上,以便用户不会看到令人困惑的错误消息或渲染错误时的丑陋显示。 我们可以在网页上执行相同的操作,以使丢失的图像被设置为更漂亮的默认值,或者只是不出现。

我们还可能检索有关我们的Character , Creator , Event , Series和Story实体的其他数据,以填充到我们的数据库中以进行检索。 通过将其他一些实体彼此绑定在一起,可能还会获得更多的见解,尽管这会迅速增加应用程序的复杂性。
其他端点
该应用程序也可以构建为包括其他端点,以获取有关外围的Character , Creator , Event , Series和Story节点的更多详细信息。 然后,用户可以从网页中深入了解有关这些节点中每个节点的更深入信息,并找到有关每个节点的其他信息。

例如,如果用户在我们的主要html页面上单击ComicIssue的Character ,我们可以将他们发送到另一个包含有关该角色的更多信息的网页,并可能添加另一个自定义查询,以查看此人出现最多的其他超级英雄(他们经常合作)。
像这样添加功能将意味着在它们之间添加所有关系和属性会更加复杂,但是它无疑将有助于探索网络和分析数据集的连通性。
使网页更漂亮
如我们之前的博客文章所述,前端页面可以进行一些改进。 我们为它提供了一个很好的起点,但是我认为我们可以添加一些相对较小的功能,这些功能将大大提高界面的可用性和整洁度。

首先,我想对图形渲染进行调整,在其中调整相关的ComicIssue及其周围的关系,而不是每次绘制图形的一部分。
当我更新render()方法以每次用户从左窗格的列表中单击ComicIssue执行时,便开始了此过程。 但是,我将需要在应用程序中调整查询,以检索单击的特定漫画周围的节点和关系,并将这些节点/关系传递给构建可视化的端点。 这将是前端和后端工作的结合,但是我认为这会使应用程序和可视化变得更加有趣和相关。
上面已经提到了这一点,但我们也希望以更好的方式处理网页上的某些丢失或错误数据。 如果返回空结果或无用的值,则显示它们没有多大意义。 尽管我们可以在实际数据库中清除其中的一些内容,但可能无法全部处理。 空白或丢失的数据仍然会有所帮助,我们可以通过更好的显示使它有价值。
例如, ComicIssue可能不是Series或Event 。 除了显示空白或空值,我们还可以使用一条消息,指出漫画不在系列或事件中。 用户可能会觉得很奇怪,并深入研究有关创作者或角色的更多信息,以查看是否存在模式。 或者,如果值不是空的,而是未知的,则可能API没有记录该信息,并且用户可以进行外部研究以手动填充这些值。
关于改进网页的最后一个想法是使左窗格中的ComicIssues列表可分页。 这将缩短滚动条和结果集,并允许用户在更易于管理的细分中筛选搜索结果。 更改此设置将需要进行一些研究,以研究如何对数据库中的结果进行分块,然后用箭头显示它们以在结果中前后移动一定量,但是我认为这将是一个不错的功能。
项目经验教训
如果您已经按照本博客系列进行了学习,那么您可能知道我们在每一篇文章的结尾处都为每个步骤提供了一些经验教训。 这可能对您有所帮助,但对于我们查看进度和跟踪过程中的异常发展绝对有帮助。 我想重点介绍前几篇文章中的一些学习内容,并在整个过程中添加其他内容。

- 第1部分:对真实数据集进行建模有很多东西要学习。 我们可以通过提供的示例向您介绍概念,但这些示例简洁明了,消除了头痛,便于入门和学习。 我们可以通过其他人的示例进行练习,但是他们经常为我们完成清理数据,创建数据模型以及共享导入脚本的工作。 当我们独自面对所有这些障碍时,我们真正地学会了如何克服挑战,而没有预先确定的过程或捷径来克服挑战。 我们不必从头开始,因为在其他示例中为我们提供了完成这些任务的工具和想法,但是我们必须在前进的过程中解决自己的独特情况。
- 第2部分:按照上述步骤,给出一个实际的例子可以帮助您在这种独特的情况下发展技能。 当我们遇到错误的,不一致的API时,我们必须弄清楚要添加到Cypher查询中的内容以减少超时,并且仍然在API的调用限制和结果数量限制内。 有时,您只需要尝试动手操作数据集即可获得更深入的了解。 当然,这意味着增加了实验时间。 有一个截止日期并不是一件坏事,但这有助于花一些内在的时间进行探索,以找到最佳的解决方案。
- 第3部分:数据导入似乎是到目前为止我完成的大多数项目的长期工作。 我认为可以很容易地假设项目的主要结果(应用程序,过程,演示等)将花费最长的时间,但是我发现从一个地方到另一个地方获取数据花费了最多的时间和精力。 毕竟,数据的结构和完整性必须良好,否则就没有其他。 分解数据格式,缺失/空值和处理以及转换需要一些时间和仔细的计划,才能获得我们想要的结果。

- 第4部分和第5部分:尝试研究工具,并选择最适合项目目标的工具。 对我们来说,Spring Data / Spring Boot已经很熟悉了,但它也符合简单明了的标准。 这两种功能都使我们能够满足构建应用程序实时编码演示的标准。 简单明了的代码意味着我们可以在演示时段内很好地解释我们所需的一切。 虽然使用Spring Data Neo4j对我们来说有点陌生,但我们的项目团队(Mark和I:D)带来了应用于SDN所需的基础技能。 他具有Spring专业知识,而我具有Neo4j知识。 在一起,我们可以相互依赖,并在新项目中扩展我们的两种技能。
- 第6部分和第7部分:您不应该重新发明轮子,但是有时您可能需要稍微自定义轮子。 🙂一旦我们概述了一组与一个实体匹配的领域类,便能够将同一轮廓复制/粘贴到我们的其他实体中,并针对不同的属性进行调整。 有许多用于在实体之间创建关系的代码示例,但是没有一个示例与我们的Marvel数据集紧密相关。 在这里,我们需要“关闭脚本”并为我们的特定用例和数据集编写/测试代码。

- 第8部分:当您将要构建的所有部件编织成完整的最终结果时,请尝试理解为什么每个部件都适合某种方式并做出明智的决策。 很容易陷入混乱,将它们拼凑在一起,因为您知道它是这样工作的。 在我们的项目中,我们将代码划分为
ComicIssue实体的控制器和服务,因为我们认为它使职责完全分开,并使其他开发人员更容易遵循采用哪种方法处理特定功能。 仅仅从其他项目中复制/粘贴D3示例代码也很诱人,但是后来我无法在博客文章中向所有人进行解释。 花时间花每一块拼图并知道它为什么会帮助您为下一个项目重新组装和修改这些拼图。 - 第9部分:您也不需要立即进行过度设计。 “罗马不是一天建成的”这一说法也适用于软件开发。 您不必在第一次迭代中就以完美的顺序安排整个项目。 对于我们来说,我们不需要构建具有所有编码和功能的端点的完美网页。 我们可以让项目随着需求和兴趣的增长而发展。 享受学习过程,让想法浮出水面,以便将来进行改进。
*免责声明:我确实意识到并不是每个开发人员和每个项目都有时间来扩展时间表或尝试新技术。 但是,我确实认为在每个新项目中处理一件小事很重要。 毕竟,如果您从不做任何新的事情,并且从不花时间提出更好的想法,那么您的输出将永远无法发挥全部潜力。 开发人员可能没有做出某些决定的声音,但是我们仍然可以尽力支持这些思考过程。 祝你好运! 🙂
项目资源
我们希望为所有人提供一个地方,以使每个人都有一个地方来检索我们在该项目中使用和引用的所有文档。 这里有很多资料,但是如果您跟随所有先前的文章,那么您已经征服了所有这些主题! 祝贺您学习成功,并在开始下一个项目时随意从下面的资源中获取其他信息!
- Github源代码
- 该博客系列中的所有先前文章:
- 第1部分-Marvel数据集和数据模型
- 第2部分-数据从API导入Neo4j(初始通过)
- 第3部分-数据导入(添加详细信息)
- 第4部分-Spring Data Neo4j的选择和结构
- 第5部分-第一个域类(字符,存储库,控制器)
- 第6部分-其余的领域类(创作者,事件,系列,故事)
- 第7部分-将实体与关系绑定
- 第8部分-端点,查询,数据格式等
- 第9部分-网页和图形可视化
- 在Twitter上关注二人组,看看会发生什么:@mkheck和@jmhreif
- 下载Neo4j
- Spring Data Neo4j文档
- Spring Data Neo4j指南
- Marvel API(数据集)
- 龙目岛项目文档
- Spring / Neo4j电影应用示例
当然,请随时下拉存储库并向其中添加您自己的自定义或功能! 如果需要,您也可以与我们联系。 我们希望看到更多使用Spring Data Neo4j的项目,以及如何将您的应用程序提升到一个新的水平。 继续打造惊人的东西!