【发布时间】:2013-03-19 12:21:13
【问题描述】:
我渴望开始一个用于学习目的的辅助项目,并且我正在寻求一些关于使用哪些技术/框架/库以及如何构建应用程序的指导,至少是在较高层次上。我是一名前端开发人员,虽然我在服务器端编程、数据库等方面做过一些杂项工作,但这将是我第一次尝试亲自创建一个全栈应用程序。我决定使用 Node.js 作为服务器端环境,但这是我唯一的坚定要求。
我已经想出了一个应用程序的想法。以下是有关其功能的一些说明:
- 这是另一个待办事项列表应用程序。它与您的基本清单的主要区别在于它对GTD system 的某些方面的适应,以及列表的嵌套/树结构(与平面列表或 GTD 使用的单层嵌套相反)。我使用了树的比喻,树干是列表的基础,分支是项目和子项目,叶子是单独的任务。
- 项目(分支)可以有很多子项目(其他分支的分支),项目和子项目都可以有很多任务(叶子)。项目是您最终可以完成的任何多步骤过程,但您实际上无法执行。与 GTD 一样,您只能执行定义为物理动作的任务。例如,“获得银行贷款”是一个项目(这是一个可定义的目标),“研究贷款人的利率”是一个子项目(它推动您完成该目标),以及“致电当地的富国银行分行” “访问chas.com 的借贷部分”和“向 Bob 发送电子邮件以获得他的推荐”都是任务(它们是您可以采取的具体物理动作来推进项目/子项目)。
- 一旦您完成了项目中的所有任务(修剪了所有叶子),该项目即被视为完成(分支被切断)。您的目标是不断修剪树木以防止其过度生长。
- 如果你像我一样,你有一个庞大的项目列表,这些项目永远完成并被新项目取代。除了存储您的列表之外,此应用程序的价值还在于它能够指导您下一步工作。为此,您可以为每个任务定义各种元数据(仅针对任务;您不能对项目执行此操作,因为它们只是用于组织任务组的存储桶)。
- 此元数据包括有关您可以排序和搜索的每个任务的附加信息。例如:
- 背景:完成任务需要哪些工具/情况?例如,要更新您的驾照,您可能需要填写完整的文书工作,并且在工作日工作时间内在特定地点。
- 截止日期:是否可以随时完成,或者是否有严格的完成日期?
- 重要性:这是您想要做的事情,还是您需要做的事情?
- 时间:您估计完成任务需要多长时间?
- 鉴于此元数据,您可以随时打开应用程序,并根据您当前(或即将到来的)上下文、即将到来的截止日期、哪些任务最重要、您还有多少时间来快速确定下一步要做什么下一个承诺等。这使您不必日复一日地扫描相同的平面列表,并进行相同的心理计算,而无需任何有组织/存储的关于每个任务的元数据。您可以查看即将到来的截止日期以确定下一步需要完成的工作,也可以选择当前可用的资源,从而将列表缩小到可以完成的任务。
此应用程序中的实用程序将来自其易用性/使用速度以及在简单性和可扩展性之间取得适当的平衡。对于前一点,您应该能够在适当的位置编辑项目/任务描述,单击以切换元数据,拖放以将任务移动到不同的项目等。应该有最小的列表管理开销。对于后一点,您应该只需要输入您关心或对您有用的每个任务的元数据,从而尽可能多地使用应用程序。如果您只想使用该应用程序来记录和更新您的列表项,那很好;如果您想精细地管理截止日期,指定每个任务的重要性等,那也没关系。你投入的越多,得到的越多,但除了每个项目/任务的简单行项目描述之外,没有强制数据输入。
这一切都向我暗示了一个单页网络应用程序(理想情况下,最终对移动设备友好)在后台永久保存。您应该能够登录,移动一些东西,将一些东西标记为已完成,然后关闭它。没有手续,就像一个书面清单。这将是一个不断发展的列表,最终应该可以节省您的时间,而不是增加额外开销来跟踪您所有的日常小任务。
因此,鉴于所有这些,我正在寻求一些有关如何开发此应用程序的建议;本质上,如何构建它。我应该使用 Ember.js 或 Backbone.js 之类的客户端 MVC 框架吗?哪种数据库最适合存储此类数据,我的架构应该是什么样的?如何处理 CRUD/REST 和路由?作为一个单页应用程序,我是否必须求助于一个巨大的控制器?我在服务器和浏览器之间传输的数据是什么样的?同样,我唯一的艰难决定是在服务器上使用 Node.js,因为这项工作的重点主要是利用我的 JavaScript 技能进一步深入堆栈(并希望提出一个有用的应用程序!) .其他一切都欢迎推荐。
鉴于您的建议,我相信我可以深入研究这些技术的细节并弄清楚这些部分的适用性;我现在几乎不知所措,因为对于如何构建应用程序有很多选项和方法,虽然我在 Rails 视图中到处修复了一个错误,但我'从未构建过完整的应用程序;我不完全理解这一切如何结合在一起的基本原理。我希望得到一些反馈,例如“列表中的每个任务都可以是一个文档;使用 Redis 存储一个带有任务属性的 JSON 对象,当用户在浏览器中更新任务时,编写并发送这个对象从客户端到您的控制器以更新 Redis 文档”。这可能是完全的恶意,但希望你明白这一点。任何指向教程、演示或其他示例的链接也非常感谢 - 我已经阅读和观看了很多,但我似乎永远无法将这些更一般的解释映射到我的特定用例。
如果我有什么特别幼稚的地方,或者我遗漏了任何重要的细节,或者我的要求是否不完全清楚,请告诉我。
我也意识到这类问题不是 SO 的理想用例,因为没有“正确”答案,但我认为最好的答案就是最有帮助的答案。
非常感谢您的帮助!
【问题讨论】:
标签: javascript node.js web-applications database-design architecture