首页
学习
活动
专区
圈层
工具
发布

架构之美:教你如何分析一个接口?

相信没有人能把所有接口细节记住, 如何才能理清繁杂的接口呢? 找主线,看风格。 找主线,你需要找到一条功能主线,建立起对这个项目结构性的认知,而不是一上来就把精力放在每个接口的细节。...这就是一种约定,不需要你费心思考,因为这是人家总结出来的行业中的最佳实践。只要按照这个规范写,你写的就是一个符合REST规范的代码,这就是Rails引导的外部接口风格。...当年我接触Rails时,最让我感到震惊的是它的数据库查询方式,与传统开发的风格截然不同,就这么简单的一句: Article.find_by_title("foo") 要知道,那个时候用Java写程序,即便是想做一个最简单的查询...而 Rails用一句轻描淡写find_by就解决了所有的问题,而且,这个find_by_title方法还不是我实现的,Rails会替你自动实现。...一个好的接口设计,无论是最佳实践的引入,抑或是API设计风格的引导,都可以帮助我们建立起良好的开发习惯。 理解一个项目的接口,先找主线,再看风格。

3.4K20

重新温习软件设计之路(2)

ProductService,只需要Mock一个IProductRepository的GetProduct方法的实现即可完成这个Service的测试。...好的软件,也一定是需要研究人性的。帮助程序员这个群体偷一点懒的软件,就是这些经过高度封装的中间件/组件 又或者是 更高级的编程语言。...记得我在2018年学习Spring Cloud的时候,接触了Spring Data JPA这个框架,现在看来,它就参考了Rails的接口设计,这时如果再需要表达一对多关系的时候,就可以在Java中写成这个样子了...现在看来,这也是一种“约定大于配置”的接口设计,你只要接口设计的名字满足规范,我就能帮你生成对应的SQL语句,让你无须编写普通的SQL查询代码,只需要在Service里面调用这个Repository的接口即可...综述,作为分析软件设计的第二步,我们可以通过“找主线,看风格”的方法来看接口,即找到一条或多条功能主线,对项目建立起结构性的了解,然后沿着主线将相关接口都梳理出来。

1.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQLite 的性能优化其实挺难的,但是知道三个技巧让你的应用飞起来!

    最近,有个朋友问我:“为什么我的 Rails 项目用 SQLite,总觉得慢得像蜗牛?”这让我想起很多开发者在遇到类似问题时的感受,尤其是初次接触 SQLite 的时候。...SQLite 作为轻量级的数据库,在 Rails 项目中非常常见,特别是开发阶段。但问题来了,SQLite 真有我们想象中那么简单吗?它的性能优化又需要注意什么呢?...SQLite 虽然是轻量级数据库,但它同样支持索引,正确的索引可以大幅提升查询性能。还记得的我之前的文章里面的内容吗?...这个方法的好处是,它能一次加载一定数量的数据到内存中,避免一次性加载太多数据导致内存溢出。但在一些特定场景下,find_each 并不是最佳选择。比如说,你需要对大量记录进行更新操作。...试试这些优化技巧,让你的应用不再“慢得像蜗牛”,而是轻盈如燕。希望这篇文章对你有所帮助!如果你有任何关于 SQLite 或 Rails 开发的问题,随时来聊!

    4.3K10

    GitLab技术选型为何如此不同:坚持用过气Web框架十多年、坚决不用微服务

    不过人气并不能直接说明语言质量差,一方面 Ruby on Rails(用 Ruby 写的开源 Web 应用程序框架)仍是实现原型设计演示的好方法,能帮助开发者在几天之内更稳妥地构建起最小可行性产品,另一方面...从 GitLab 的角度看,他们本身没有复杂的运行体系,也不需要用微服务,在这样的情况下,Ruby on Rails 对他们而言反而是最佳选择。...这里的部分原因可归功于 Rails 在良好架构与平易近人之间找到了平衡。 “我们不需要微服务” 在 1971 年发表的文章《关于将系统分解为模块时,所应遵循的标准》中,David L....虽然 Rails 确实能帮助 GitLab 有效达成目标,但它也有一些缺点,特别是在性能方面。所幸的是,GitLab 大多数代码库中只有极小一部分需要重视性能。...因为这些方法不仅会在部署和集成层面,显著提升源代码轻微改动的实现难度,同时也会带来过于严格的架构实施约束。“谁能预测出未来一切可能的扩展点?根本不可能,我们也压根不打算给自己找这个麻烦。”

    1.6K20

    Strikingly 团队2017技术展望

    服务端只需要定义好业务逻辑中设计的数据类型系统,客户端工程师就可以使用 GraphQL 自定义查询的数据及其结构,大大地提升了 API 的灵活性。...Rails 的惯例大多是 Web 开发领域多年总结下来的最佳实践,即使是新手,也能够在短时间内开发出安全,健壮的 Web 应用,这个对于初创企业来说是非常有帮助的。...要解决这问题,我们需要重新审视 Rails 在 Web 应用开发中的定位。Rails 只是一个 Web 框架,它不是一个应用开发框架,不能也不应该负责 Web 应用中领域相关的部分。...在应用中,一个 PORO 对象通过工厂类产生,工厂类负责完成依赖注入,在这个过程中,可能需要调用其他 PORO 的工厂类来产生对象。...比如 Strikingly 提供域名的购买和管理服务,这个服务提供了域名查询、购买、验证、续费、取消等操作,这些操作都是域名这个领域内的“标准操作”,并不依赖于我们的上级域名提供商。

    2.7K00

    慢的不是 Ruby,而是你的数据库

    当你一遍又一遍地运行此操作时,这一天只需要几分钟的时间:在开发过程中运行大约 20 次的脚本上总共需要 1.2 秒,然后可能每周运行一次。 虽然我只关注 CPU,但内存也是一个重要问题。...其中一个 Rails 的问题是它与数据库的高度耦合(也可以说是一种好处)。Rails 专注于掌控数据库的一切。没有数据库,Rails 将毫无用处,甚至可能阻碍工作进展,而不是提供帮助 [2]。...为了深入分析这个问题,我将会比较一些非 Rails、非 HTTP、纯 Ruby 的脚本。 Ruby 在处理大量数据方面并不擅长,但从本质上讲,这正是 Web 服务所需要的。...更实际的情况是:几年前我为了修复一个 N+1 查询而加入的 User.active.includes(:roles) 动态地选择它认为你需要的内容。...[3] 一个快速 grep:超过 9000 个类,超过 33000 个方法;不包括所有神奇的动态方法,比如围绕数据库模型的方法。这还不包括 rails 本身附带的 70 多个依赖项。

    6.2K30

    如何入门 Python 爬虫?

    就好比很多人一上来就建议刚接触web开发的人去学ruby on rails,rails虽好,但rails太“智能”了,它帮你做了太多的事情,以至于你甚至会觉得我都没怎么做,这东西是怎么出来的。...在做的过程中,你可能会遇到一些困难,比如你拿到的html跟浏览器看到的html不一样,你上网找一找就会发现,你需要了解一个叫http请求头的东西。...有时候你又会发现,有一些网站需要登录才能取得一些信息。找一找资料,你就会接触到“模拟登录”,“post请求”等名词。...在这个项目中遇到的跟爬虫相关的所有问题几乎都在上面了,当然也遇到了一些其他的问题,都通过网上的资料和他人的帮助解决了。...题主提这个问题也有一段时间了,可能都已经学会了吧,我就全当做学完后的总结吧。希望对今后想学习的人有所帮助。 最后说一些感想: 1.

    1.1K90

    像一名教育者一样思考代码质量

    这件事需要花费几年时间去学习,花费几十年才能掌握。我也许可以提供一个捷径:像一名教育者一样思考代码质量。“捷径”这个词表达的能力很强大。这并不是一个捷径。但我认为,这种观点很重要。...fileGuid=rU8e3yc0h4Mztn6T 我不确定这个 controller actions 的示例是不是一个好例子。实际上,这是你很快就能学会的,或者你团队中的某人可以马上发现并帮助你的。...事实上,这些古怪的东西能够帮助 Rails 专家变得更高效。但是,如果你工作在一个对 Rails 都是新手的团队中时,这些菜鸟绝对会陷入绝望和沮丧中。 这就是需要像一名教育者一样思考的地方。...问题不在于某样东西是“最佳实践”还是“Rails 编程方式”,而是在于它对你的受众是否有意义。 Angular 我过去犯过这个错误。...也许减少这些小别扭是一个不错的主意。 特别是我想到的以下几点。你的文本编辑器中应该有这个插件。

    1.2K30

    CTO 写低级 Bug,致公司 70 GB 数据遭泄露!

    这种惯用的方法可以帮助程序员能够以安全的方式编写 SQL 查询功能,且可以“清理”网站访问者在搜索框和其他 Web 网站中输入的字段,借此来确保在将文本传递给后端服务器之前,先清除掉所有恶意命令。...不过,开发者也需要向一个包含“find_by_sql” 方法的 Rails 函数添加了一个调用,这一方法直接在查询字符串中接受未经过滤的输入(Rails 是一种广泛使用的网站开发工具包)。...对此,Facebook 的前产品工程师 Dmitry Borodaenko 在一封电子邮件中写道,“ 或许 Rails 的官方文档没有警告过用户存在这个陷阱,但是,如果作为开发者,完全了解在 Web 应用程序中使用...作为一家创业型的开源社交网络服务平台,其支持言论自由,也一直被视为 Twitter 的最佳替代品,不过,Gab 此次在没有任何解释之下,直接删除提交的代码,引发业界不小争议。...3、网友:不足为奇 针对这样的错误,也引发了不少网友的讨论: 一点都不足为奇。在某一时刻,当他们有一个 API 时,我可以跟踪和看到在网站上看不到的"锁定"帐户中的信息。

    81210

    如何入门 Python 爬虫?

    就好比很多人一上来就建议刚接触web开发的人去学ruby on rails,rails虽好,但rails太“智能”了,它帮你做了太多的事情,以至于你甚至会觉得我都没怎么做,这东西是怎么出来的。...在做的过程中,你可能会遇到一些困难,比如你拿到的html跟浏览器看到的html不一样,你上网找一找就会发现,你需要了解一个叫http请求头的东西。...有时候你又会发现,有一些网站需要登录才能取得一些信息。找一找资料,你就会接触到“模拟登录”,“post请求”等名词。...在这个项目中遇到的跟爬虫相关的所有问题几乎都在上面了,当然也遇到了一些其他的问题,都通过网上的资料和他人的帮助解决了。...题主提这个问题也有一段时间了,可能都已经学会了吧,我就全当做学完后的总结吧。希望对今后想学习的人有所帮助。 最后说一些感想: 1.

    56220

    “逃离”单体,GitHub的微服务架构实践

    在公司的整个发展历程中,我们雇佣了世界上最好的 Ruby 开发人员,帮助我们扩展和优化代码库。...在数据库模式中添加或删除表,都要更新这个文件。我们通过一种静态分析测试方法来提醒开发人员,在修改数据库模式时,要更新这个文件。 接下来,对于每个模式域,我们找了一个分区键。...最终,创建数据库模式功能组帮助我们将数据拆分到微服务架构所需的不同服务器和集群上。 对于当前的跨域查询,我们做了修复,以防数据拆分对产品造成破坏。...在 GitHub,我们在单体中实现了一个查询监视器来帮助我们检测,并在发现跨域查询时发出告警信息。我们会根据域边界,把这些查询拆分并重写成多个,并在应用程序层实现必要的连接。...此后,任何新特性都应该创建成单体外的一个微服务。 下一步,找一些简单的小特性从单体中迁移出来,例如,那些没有复杂依赖和共享逻辑的特性。在 GitHub,我们是从 webhook 推送和语法高亮开始的。

    1.1K20

    总结Web应用中常用的各种Cache

    在Rails里面内置了fresh_when这个方法,一行代码就可以完成: class ArticlesController def show @article = Article.find...etag header干掉,nginx的开发人员说根据rfc规范,对proxy_pass方式处理必须这样(因为内容改变了),但是我个人认为没这个必要,于是用了粗暴的方法,直接将src/http/modules...如果文章类别都不一样,就会出现N+1查询问题(常见的性能瓶颈),rails推荐的解决方法是用Eager Loading Associations ( http://guides.rubyonrails.org...跨请求周期的缓存 同请求周期缓存所带来性能优化是很有限的,很多时候我们需要用跨请求周期的缓存,将一些常用的数据(比如User model)缓存,对于active record来说,利用统一的查询接口来...gem的优点是代码实现简单,cache设置灵活,也方便扩展,缺点是需要用不同的查询方法名(fetch),以及额外的关系定义。

    6.3K40

    Web Hacking 101 中文版 十六、模板注入

    换句话说,除了拥有接收 HTTP 请求的代码,从数据库查询必需的数据并且之后将其在单个文件中将其展示给用户之外,模板引擎从计算它的剩余代码中分离了数据的展示(此外,流行的框架和内容管理系统也会从查询中分离...例如,jinja2 存在任意文件访问和远程代码执行,Rails 的 ERB 模板引擎存在远程代码执行,Shopify 的 Liquid 引擎允许访问受限数量的模板方法,以及其他。...与 SSTI 相反的是客户端模板注入(CSTI),要注意这里的 CSTI 不是一个通用的漏洞缩写,像这本书的其它缩写一样,我推荐将其用于报告中。...基于他们的 WriteUp,RoR 的控制器在 Rails APP 中负责业务逻辑。这个框架提供了一些不错的健壮的功能,包括哪些内容需要渲染用户,基于传给渲染方法的简单值。...使用这个功能,开发者就能够接收在 URL 中传入的参数,将其传给 Rails,它用于判断要渲染的文件。

    5.2K10

    最受推荐的 9本全栈开发书籍,助web前端开发学习

    移动开发的最佳实践、安全性和陷阱 这本书需要Java的基本知识,但不要求具备Spring Boot或MySQL的基础。...这个项目将向你展示Vue、Laravel和其他最先进的web开发工具和技术的核心特性。...如果大家对于学习前端有任何问题,学习方法,学习路线,如何学习有效率的问题,可以随时来咨询我,或者缺少系统学习资料的,我做这行年头比较久,自认为还是比较有经验的,可以帮助大家提出建设性建议,603985993...这是我的web前端交流3000人裙,有任何问题可以随时来咨询我。...3、《Rails, Angular, Postgres, and Bootstrap》 Rails是构建web应用程序的一个很好的工具,但不是最好的,通过Angular 4、Bootstrap和PostgreSQL

    5.8K10

    DHH:2017年Rails 框架还值得学习吗?

    很少有框架是提供完整解决方案的. 我想, 就标题的问题来讲, 答案就是, Rails 的约定大于配置核心原则能够有效帮助开发者减轻选择轮子的痛感....我已经在其他地方进一步详细阐述了在Rails 核心原则中关于配置的约定方法, 以及点菜 / omakase冲突的说明, 和集成系统的吸引力以及 Rails 社区的其他核心价值....我认为这或许有点关系, 但区别还是非常大, 如果因此而错失 Rails, 这个决策真的是因小失大....正如我上面提到的, Rails 有一个雄心勃勃的终极使命, 那就是站在全栈的角度下, 帮助开发者处理好过程中的每一块代码, 从连接到数据库, 到 nosql 数据存储, 到业务模型, 到控制器, 直到最后...因为除了组装 HTML 外, 你在后端仍然需要大量的工作: 数据库存储, 业务模型, 计算事情, 将任务排队以供日后处理, 发送电子邮件, 触发推送通知以及所有其他的东西,真正的应用程序需要做的还有很多

    2.9K90

    我被 pgx 及其背后的 Rust 美学征服

    Rust 完全没有这个问题: 我们撰写的 my_generate_series 跟原生的,用 C 撰写的 generate_series 方法相比,效率在同一个量级,旗鼓相当。...想想看,原本在数据库中你是怎么存储电话号码的?字符串?ok,如果让你把北京的电话号码查询出来,你该如何去做?使用 like 查询?或者把表结构更改成更利于查询的结构(把区号独立出来)?...一般而言,钱包地址是公钥派生出来的,如果我们想从钱包地址查询到公钥,那么就需要创建表,把二者都储存起来。这样虽然满足了查询的需求,但数据包含没有意义的冗余。...有没有可能只存公钥,不存钱包地址就能完成这个查询呢?可是 Postgres 并不知道它们是如何映射的啊?...过去 10-20 年,随着 rails / django / phoenix 这样的胖 web 框架的崛起,使得我们沉迷于数据层使用 ORM 带来的「巨大好处」:数据库无关 —— 你只需要改改配置,就可以

    1.8K20

    给大家引荐下我的开源项目【们】

    这个项目首页的第一句话就是: ServcieFramework 定位在 移动互联网后端 领域,强调开发的高效性,其开发效率可以比肩Rails. 可以看到,SF是受到Rails的影响。...但是受限于Java这个语言自身动态性的不足,所以虽然模仿Rails的Java框架很多,但终究似乎都难以火起来。现在,Web上,Java还是Spring(Boot)的天下。...设计他的原因是我比较厌烦了来一个业务,就要开发一个Spark程序,然后还要找台跳板机部署,运行,明明五分钟就可以搞定的事情,来来回回要一个程序员一天。...我希望团队通过简单的MLSQL脚本就能完成批,流,adhoc查询以及机器学习相关的任务,而且所见即所得,写完点击运行直接看结果,速度要快。关于这个项目,我写的文章以及视频等等已经非常多了。...目前原生delta 我个人认为还没达到开箱即用,不做任何调优或修改 就能很好满足很多业务场景,或多或少还是需要你了解下里面的原理的,这也是delta-plus存在的理由。

    55810

    独家 | 英伟达“护栏”软件的失败为LLM(大型语言模型)安全指明前进道路

    现在,安全研究人员已经发现了这个安全漏洞,但这其实不能完全归咎于英伟达。实际上,问题还是出在LLMs上。...通过这种方式,研究人员能够从一个关于医疗保健的查询中提取到电影《回到未来》的情节线索。 为了测试护栏的其他方面,研究人员对事实核查护栏进行了测试,但在测试场景中未能检测到幻觉。...他们强调系统不应该这样设计,因为由此产生的安全问题再不断上升。 在这个场景中,该团队构建了LLM并使用NeMo框架创造一个护栏。...然而,这个护栏很容易受到简单漏洞的攻击,例如替换单词中的字母和正确构造查询。他们还指出:“将护栏应用于这样的程序中是不恰当的”。...此外,在护栏和AI防火墙对它们所使用的LLM有了更深入的了解后,也可以使得其起到更好的效果。研究表明,结合强有力且明确定义的护栏的架构方法可以帮助用户克服在企业环境中部署LLM时出现的许多问题。

    68520

    来看看在美国最容易找工作的8种语言吧!

    在美国,最受欢迎的工作近半数在技术行业中,8种计算机编程语言对找工作大有助益,其中以数据库查询语言SQL位居榜首。...在25个收入最高、最受欢迎的工作中,几乎一半是在技术行业,并需要有计算机编程的实际经验。 计算机编程范围广泛,有许多不同的编程语言。但是在工作场所中,有些语言被认为比其它语言更有价值。...去年下半年,计算机编程培训网站Coding Dojo(编码道场)列出了8种在计算机专业人士中需求最大的编程语言,首屈一指的是SQL,这是目前那些雇用计算机程序员的公司最为需要的编程语言。...接下来是:Java、Javascript、C#、C++、Python、Ruby and Rails以及iOS/Swift。 SQL是大型公司用来从数据库中更新或提取信息的结构化查询语言。...在数据库中拥有巨量信息的大型公司,依赖于那些懂得如何运用SQL语言分析数据的程序员,以帮助公司做出正确的经营决策,让公司在取得成功的道路上处于最佳位置。

    952100

    所谓“现代Web开发”,都是些什么妖魔鬼怪?

    当然,我不是劝大家用汇编或者 C 语言搞 Web 开发,但关于 JavaScript、Ruby on Rails、Python、Django 以及 PHP 框架的疯狂观点也该消停一下了。”...更可笑的是,用它甚至不足以输出‘hello world’,因为还另外需要单独的路由包和状态管理包。这一切太疯狂了,但每个人都在这条路上狂奔,还美其名曰‘现代方法’。”...对于大多数消费者和商业软件,在浏览器中运行是显而易见的选择。不管你喜欢它还是讨厌它,这就是当前的实现方法。”...当然,以上都是闲话,只为引出第一个真正重要的问题。 我们为什么需要这些浏览器供应商?如果没有他们,不就没有这么多屁事了?我认为问题出在所谓“现代 Web 开发人员”身上,他们才是罪魁祸首!...有些人认为开发者的时间比计算资源更宝贵,而 Rails 和 Django 的目标就是帮助人们快速完成工作。但这也正是问题所在:如今整个互联网面临的过度臃肿问题,就是由这些不负责任且短视的观点所引发。

    81630
    领券