Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 当我知道我';你会弄错吗?_Ruby_Web Services_Api_Architecture - Fatal编程技术网

Ruby 当我知道我';你会弄错吗?

Ruby 当我知道我';你会弄错吗?,ruby,web-services,api,architecture,Ruby,Web Services,Api,Architecture,背景 我有一个个人项目,我已经尝试建立了大约5年。本质上,它是一个在线游戏——一个web应用程序。它不是一个“赚钱者”,只是我真正想要建立的东西,所以找到资金来雇佣一个熟练的团队是非常不可能的 多年来,我构建了两个功能齐全的原型,从概念/用户测试的角度来看都是成功的,但从架构的角度来看都是惊人的失败;代码乱七八糟,无法维护或进一步开发,必须扔掉 花了好几年的时间才掌握了构建客户机所需的技能——这是一个丰富/有状态且相当复杂的客户机。我将我的职业和学习与发展鸿沟的这一边联系起来。我终于到了可以构建

背景

我有一个个人项目,我已经尝试建立了大约5年。本质上,它是一个在线游戏——一个web应用程序。它不是一个“赚钱者”,只是我真正想要建立的东西,所以找到资金来雇佣一个熟练的团队是非常不可能的

多年来,我构建了两个功能齐全的原型,从概念/用户测试的角度来看都是成功的,但从架构的角度来看都是惊人的失败;代码乱七八糟,无法维护或进一步开发,必须扔掉

花了好几年的时间才掌握了构建客户机所需的技能——这是一个丰富/有状态且相当复杂的客户机。我将我的职业和学习与发展鸿沟的这一边联系起来。我终于到了可以构建一个结构合理、成熟的客户机的时候了,这个客户机可以成长,而且不需要在6个月后就被淘汰。在这方面有很多工作要做,但至少我知道我能做到,而且做得相当好。后端是另一个故事

到目前为止,我已经用PHP、SQL、Ruby、CouchDB、MongoDB、FriendlyRM、NodeJS等多种组合至少重建了11次后端。通常,在我发现我的方法存在一些巨大缺陷并重新开始之前,我不会走太远:RPC到REST,关系到文档驱动。我很清楚,过早优化是万恶之源,但应用程序非常依赖于快速移动、高度动态的数据。RESTful API设计、缩放、分片、缓存、身份验证、复制——我对这些都没有太多经验,我也不希望很快就能做到远程操作。这些事情需要多年的研究和经验

在这个领域找一位专家更有意义,但如果没有资金,我觉得我需要成功地部署另一个原型,以吸引合适的人。所以,我必须尽我所能建造它

问题


假设无论我如何构建它,后端架构都将是错误的,需要重建,那么继续构建“刚刚足够”以继续开发客户端应用程序的最佳方式是什么?即使很糟糕,有没有办法“组合”JSON web服务?Ruby和Sinatra还有MongoDB?德扬戈?是否有现成的Web服务生成器?不需要全栈web框架,因为没有表示层,只有数据。如果您有任何建议,我们将不胜感激。

您不需要构建任何类型的web后端,就可以开始创建客户机应用程序的原型。只需让客户端应用程序调用返回虚拟数据的存根函数即可。

我的观点:过于强调技术,而对坐下来做正确的设计不够重视

  • 从高级设计开始
  • 确定所涉及的不同的主要部分。为第1步和第2步花费一些高质量的时间
  • 查看哪些现成组件可用于帮助快速实现不同的部分。考虑到以后你可以把这些组件撕成别的东西(包括你自己的解决方案)。
  • 重温#1和#2
  • 挑选一两个片段,开始为相关片段编写工作原型
  • 完成腿部工作后,再次从步骤1开始,看看发生了什么变化,以便进行相应的补偿

  • 首先,使用干净的模块化代码,使其工作缓慢

    如果它是模块化的,你可以替换一两层而不必把整个东西都扔掉


    虽然它们提供模块化,但要小心web服务,甚至REST,因为它们往往速度较慢;例如,每个连接都有很多开销。

    构建此类大型复杂的应用程序,尤其是具有大量相互依赖性、特定于状态的条件以及可能需要使用不兼容语言的客户机-服务器划分的应用程序,无论您如何处理,都是令人望而生畏的。根据我在其他类似项目中的经验,无论你多么小心,第一次尝试都注定会失败。诀窍在于将失败视为通往成功的必经之路,而不是在构建应用程序时对每一件小事都大惊小怪

    第一个任务应该是用尽可能少的编程让它“工作”,简单地获得您想要的效果,即使非常粗略,这样您就可以看到它是如何组合在一起的。如果你能把一个大问题分解成一系列小问题来解决,你可能会在一个因素中找到成功,这可以激励你去解决更大或不同的问题

    要采用的一个有用策略是保持应用程序的元素松散耦合,以避免除非严格要求,否则的相互依赖性,这样您就可以交换整个应用程序的各个部分或对其进行改进,而无需进行一系列相应的更改。例如,您的网络代码可以在客户端和服务器之间传输状态更改,而不必关心状态本身的性质,但是您的状态管理代码不必关心状态是如何传输的,只需要关心它们是如何传输的

    掌握应用程序的整体架构也很有用,这样您就不会迷失在杂草中。从高层次的角度来看,您可能希望熟悉basic,它可以帮助您将原本难以理解的混乱代码组织成简单、模块化、易于构建的代码

    关于框架和语言,我想说的是避免频繁切换。虽然探索一门新的语言以了解哪些功能可能有助于解决您的特定问题是有教育意义的,但如果您坚持使用这种语言,您可能会更有效率,即使有些事情很难实现,因为您使用它会更有效,改进您的方法以更好地适应语言