1

我正在开发一项服务,为我们的学生和教职员工提供一个单一的日历(ICS 订阅),其中包含他们的学术日期(学期和考试期的开始和结束、上课日期和时间、考试日期和时间等)。我是 Ruby 和 Rails 新手;我们在这里开始更多地使用它,所以我认为这将是一个很好的学习机会。我无法弄清楚如何构建和建模(如果有的话)应用程序的某些部分。

该应用程序在概念上非常基本:

  • 用户登录并为他们创建用户记录。生成一个 UUID 并存储在用户的记录中;它用于生成他们的 ICS URL ( http://myservice.foo/feeds/johndoe_ce4970706f320130588b109add5c7cb0.ics )。

  • 当用户请求他们的 ICS 文件(通过上面的 URL)时,我需要查询一堆不同的系统以获取信息以构建日历:

    • 学生信息系统 (SIS) 包含用户的日程安排(例如 johndoe 在 10:30 - 11:20 参加 MWF 的 ENGL 100)。我需要解析这些数据并创建事件。
    • 我们的在线学习管理系统 Canvas 为其中包含的课程提供了一个作业日历。它可以作为 ICS 文件访问,因此我需要拉下该文件,对其进行解析并将其包含在我的应用程序将生成的“主”日历中。
    • 教师可以为他们的课程指定一个额外的 ICS URL,以便他们可以包含上述两个来源都没有提供的任意事件。像 Canvas 日历一样,我需要下载并解析该 ICS。

我有第一部分工作;我可以通过我们的单点登录系统 (CAS) 登录,并使用生成的 UUID 创建用户记录。不过,我不确定如何处理第二部分。我不需要存储太多永久数据;基本上,我只需要保留用户记录(其中包含他们的用户名、生成的 UUID 以及 Canvas LMS 的一些访问令牌)。提要将在第一次被请求时生成,缓存一段时间(并在需要时按需重新生成)。

我应该把解析和生成代码放在哪里?我希望它有点模块化,因为我希望我们会在其他数据源出现时添加它们。如果我实际上没有保留这些数据,我应该创建日历和事件模型吗?

4

1 回答 1

1

不,没有必要为与 3rd 方服务的交互创建一个空模型。我有一个类似的问题,我需要从外部服务接收数据并希望它是模块化的。我发现的推荐解决方案之一是在 Rails 项目根目录下的“lib”文件夹中创建一个类(处理与外部服务交互的业务逻辑)。

稍后可能会在您的控制器中需要它并用于从第三方服务接收日期。或者,如果您希望它自动加载,那么您可以在 config.autoload_paths 设置下的 application.rb 文件中添加 lib 目录的路径。

于 2013-03-19T07:42:09.313 回答