3

我渴望开始一个用于学习目的的辅助项目,并且我正在寻求一些关于使用哪些技术/框架/库以及如何构建应用程序的指导,至少在高层次上。我是一名前端开发人员,虽然我在服务器端编程、数据库等方面做过一些杂项工作,但这将是我第一次尝试亲自创建一个全栈应用程序。我决定使用 Node.js 作为服务器端环境,但这是我唯一的坚定要求。

我已经想出了一个应用程序的想法。以下是有关其功能的一些说明:

  • 这是另一个待办事项列表应用程序。它与您的基本清单的主要区别在于它对GTD 系统的某些方面的适应,以及列表的嵌套/树结构(与平面列表或 GTD 使用的单级嵌套相反)。我正在利用树的比喻,其中树干是列表的基础,分支是项目和子项目,叶子是单独的任务。
  • 项目(分支)可以有很多子项目(其他分支的分支),项目和子项目都可以有很多任务(叶子)。项目是您最终可以完成但实际上无法实际完成的任何多步骤过程。与 GTD 一样,您只能执行定义为物理动作的任务。例如,“获得银行贷款”是一个项目(这是一个可定义的目标),“研究贷款人的利率”是一个子项目(它推动您完成该目标),以及“致电当地富国银行分行” “访问chas.com 的借贷部分”和“向Bob 发送电子邮件以获得他的推荐”都是任务(它们是您可以采取的具体物理动作来推进项目/子项目)。
  • 一旦你完成了一个项目中的所有任务(修剪了所有的叶子),这个项目就被认为是完整的(分支被切断了)。您的目标是不断修剪树木以防止其过度生长。
  • 如果你像我一样,你有一个庞大的项目清单,这些项目永远完成并被新项目取代。除了存储您的列表之外,此应用程序的价值还在于它能够指导您下一步工作。为此,您可以定义关于每个任务的各种元数据(仅针对任务;您不能对项目执行此操作,因为它们只是用于组织任务组的存储桶)。
  • 此元数据包括有关您可以排序和搜索的每个任务的附加信息。例如:
    • 背景:完成任务需要哪些工具/情况?例如,要更新您的驾照,您可能需要完成文书工作,并且在工作日工作时间内在特定地点。
    • 截止日期:这可以随时完成,还是有一个很难完成的日期?
    • 重要性:这是您想做的事情,还是您需要做的事情?
    • 时间:您估计完成任务需要多少时间?
  • 鉴于此元数据,您可以随时打开应用程序并快速确定下一步要做什么,考虑到您当前(或即将)的背景、即将到来的截止日期、哪些任务最重要、您在下一次承诺之前还有多少时间,等等。这使您不必日复一日地扫描相同的平面列表并进行相同的心理计算,而无需任何有组织/存储的关于每个任务的元数据。您可以查看即将到来的截止日期以确定下一步需要做什么,或者您可以选择当前可用的资源,从而将列表缩小到仅可能完成的任务。

此应用程序中的实用程序将来自其易用性/使用速度以及在简单性和可扩展性之间取得适当的平衡。对于前一点,您应该能够在适当的位置编辑项目/任务描述,单击以切换元数据,拖放以将任务移动到不同的项目等。应该有最小的列表管理开销。对于后一点,您应该只需要输入您关心或对您有用的关于每项任务的元数据,从而从应用程序中获得尽可能多的实用程序。如果您只想使用该应用程序来记录和更新您的列表项,那很好;如果您想精细管理最后期限,请指定每个任务等,那也没关系。你投入的越多,你得到的就越多,但除了每个项目/任务的简单行项目描述之外,没有强制数据输入。

这一切都向我暗示了一个单页 Web 应用程序(理想情况下,最终对移动设备友好)在后台永久保存。您应该能够登录,移动一些东西,将一些东西标记为已完成,然后关闭它。没有手续,就像一个书面清单。这将是一个不断发展的列表,最终应该可以节省您的时间,而不是增加额外的开销来跟踪您所有的日常小任务。

因此,鉴于所有这些,我正在寻求一些有关如何开发此应用程序的建议;本质上,如何构建它。我应该使用 Ember.js 或 Backbone.js 之类的客户端 MVC 框架吗?哪种数据库最适合存储此类数据,我的架构应该是什么样的?如何处理 CRUD/REST 和路由?作为一个单页应用程序,我是否必须求助于一个巨大的控制器?我在服务器和浏览器之间传输的数据是什么样的?同样,我唯一的艰难决定是在服务器上使用 Node.js,因为这项工作的重点主要是利用我的 JavaScript 技能进一步深入堆栈(并希望提出一个有用的应用程序!) . 其他一切都可以接受建议。

鉴于您的建议,我相信我可以深入研究这些技术的细节并弄清楚这些部分是如何配合的;我现在几乎不知所措,因为关于如何构建应用程序的许多选项和方法,虽然我在这里和那里修复了 Rails 视图中的错误,但我从未构建过完整的应用程序;我不完全理解这一切如何结合在一起的基本原理。我希望得到一些反馈,例如“列表中的每个任务都可以是一个文档;使用 Redis 存储一个带有任务属性的 JSON 对象,当用户在浏览器中更新任务时,编写并发送这个对象从客户端到您的控制器以更新 Redis 文档”。这可能是完全的恶意,但希望你明白这一点。任何指向教程、演示或其他示例的链接也非常感谢 - 我已经阅读和观看了很多,但我似乎永远无法将这些更一般的解释映射到我的特定用例。

请让我知道是否有任何我特别幼稚的事情,或者我遗漏了任何重要的细节,或者我的要求是否不完全清楚。

我也意识到这类问题不是 SO 的理想用例,因为没有“正确”答案,但我认为最好的答案就是最有帮助的答案。

非常感谢您的帮助!

4

1 回答 1

1

如果我正在构建这个,我会使用 Backbone.js,并使用一个简单的 RESTful CRUD 接口(Backbone 的默认同步方法是为它构建的),但这只是我。

使用这种方法,您可以拥有一个任务模型,将其扩展到子任务模型(添加父属性),并让每个任务(以及子任务)具有一组子任务。

同步很简单,因为您可以使用 Backbones 构建同步方法和基本的 RESTful CRUD 服务器。

您可以在 Backbone 模型中包含您想要的任何验证,并通过侦听该集合上的自定义事件(当该集合状态中的模型更改时触发)绑定到任务子任务以确定任务(和所有子任务)是否完全的。

我知道这篇文章非常支持 Backbone,但这是一个主观问题,这是我的观点。

服务器端我建议使用 Express,您可以使用express-resources模块来简化 REST 实现。

同样,这只是我的意见。随意问的问题。

于 2013-03-28T21:31:29.170 回答