iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >User这个词为什么不要在代码中使用
  • 316
分享到

User这个词为什么不要在代码中使用

2023-06-28 17:06:24 316人浏览 安东尼
摘要

今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时

今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上。
现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预期,如果一开始就用正确的方式来做,就不会发生这样的事。

今天,我要告诉你的是一个经常犯的错误,一个会给你带来无穷无尽的问题的单词,那就是“users”

这个单词有两个最基本的错误:

  1. 对你的需求来说 “User” 几乎从来都不是一个好的描述。
  2. “User” 会导致一个基本的设计安全缺陷。“user” 的概念是模糊不清的,使用更精准的术语几乎总是能起到更好的效果。

你没有使用者

最开始,没有任何一个软件系统真的有使用者存在。乍一看“user”是一个好的描述,但是你稍微一想就会意识到你的业务逻辑实际上比这要复杂的多。

我会使用三个例子,从一个极端的情况出发。机票预订系统没有“users”

我曾经给机票预订系统写过访问控制逻辑,下面只是一小部分需求:

  1. 旅客可以使用预定记录码通过网站查看预定信息。
  2. 购买者可以通过信用卡号后四位数在网站上修改预订信息。
  3. 旅行社可以查看和修改他们的预订。
  4. 航空公司的值机人员可以根据角色和航空公司来查看和修改预订信息,这需要旅客提供身份信息。

不再一一列举。一些与人类相关的基本概念是“旅客”,“代理”(网站也可是看作代理)和“购买者”。“user”这个概念根本没用,并且在许多请求中我根本不会使用这个单词,举个例子,我们的请求必须包括旅客和代理人的证件,而不是使用者的证件。

Unix 没有 “users”

我们看一个不太一样的例子。Unix (这些天被称为POSIX)有用户,他们可以登录并执行代码。这样看起来很不错吧?我们深入看一下。

如果我们把所有都当作“users”的话,我们将会有:

  1. 使用终端或者图形界面登录的人
  2. 像邮件或者WEB服务器这种系统服务也会以“users”的身份运行,例如Nginx可以以Httpd用户运行。
  3. 服务器上经常会有多人共享一个管理员账号用来ssh登录(例如,亚马逊的ubuntu虚拟机默认SSH账号就是‘ubuntu’)
  4. root 身份,和上面其他身份都不同。

上面四个是几乎不同的概念,但是在POSIX上他们都是 “users”. 一会儿我们就会看到,把这些概念都称为‘user’会导致很多安全问题。

在操作上,因为POSIX的用户模型边界存在,我们甚至不能找到一种方式说“只能让 Alice 和 Bob 通过这个账号登录”。

SaaS 服务提供商没有 “users”

Jeremy Green 最近就用户模型在SaaS中的应用在推特上发文,它第一次提醒了我写下这篇文章,他的基本观点是

SaaS 服务几乎总是:

  1. 某个组织中的一个人支付服务费用。
  2. 一个或多个人共同使用这个服务。

如果你一开始就把这些人作为一个用户,你将会陷入一个痛苦的世界。你无法建立团队模型,你无法组建同时为多人支付的模型,然后你就会开始改造你的系统。现在你在SaaS案例中学到了一课,我们来看一看你的生活。

但是这只是众多例子中的一个:“users”的概念太模糊了。如果你开始怀疑“user”这个词,最终你可能发现最终你其实只需要两个概念:团队(用来组织关系和支付)和成员(实际使用服务的人)。

“Users” 是一个安全问题

“user” 这个单词不仅是业务逻辑的问题,它也导致了一系列安全问题。

“user” 这个单词如此的模糊以至于从根本上将两个概念合并了:

  1. 一个人。
  2. 他们在软件中的代表性。

为了说明这个问题,假设你正在访问一个居心不良的网站,在它服务器上的图片导致了你的浏览器内存溢出。远程网站控制着你的浏览器,并且开始将你的文件上传到他的服务上。

为什么它能这样做?

因为浏览器是以系统用户的身份运行的,它被认为与人类身份的你相同,实际上你们是不同的。你作为user,不想上传文件。但是系统的账号也是‘user’,能够上传文件,如果浏览器运行在你的账号之下,他所有的行为会被当作是你的意图,也就是说是你让它这么做的,实际上不是。

这就是被称为Confused Deputy的问题。如果你使用“用户”这个词来描述两个根本不同的东西,那么这个问题就更有可能成为你设计的一部分。

前期设计的价值

花更少的功夫处理相同的问题是成为高产程序员的关键。使用模糊不清的概念比如“用户”来组织你的软件,将会话费大量时间和精力来解决未来发生的问题。一上来就开始编码看起来是高产的,事实恰好相反。

下次你开始一个新的软件项目时,花几个小时预先确定你的术语和概念:你仍然不会完全正确,但你会做得更好。未来的你将感谢你所做的所有预防浪费的工作。

以上就是User这个词为什么不要在代码中使用的全部内容了,更多与User这个词为什么不要在代码中使用相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

--结束END--

本文标题: User这个词为什么不要在代码中使用

本文链接: https://www.lsjlt.com/news/320936.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • User这个词为什么不要在代码中使用
    今天给大家介绍一下User这个词为什么不要在代码中使用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。当你意识到你在项目开始时做的轻量、简单的设想竟然完全错了时...
    99+
    2023-06-28
  • Golang这个词在中文中代表什么含义
    Golang是一种开源的编程语言,由Google开发并推广。它的全称是Go语言,专门设计用来解决现代计算机程序开发中的一系列问题。Golang这个词在中文中的含义可以解释为一种强大而灵...
    99+
    2024-04-02
  • 为什么永远不要在MySQL中使用UTF-8
    这篇文章给大家介绍为什么永远不要在MySQL中使用UTF-8,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后...
    99+
    2023-06-19
  • 为什么不要在 Flutter 中使用全局变量
    目录前言Flutter 中的全局变量是什么?Flutter 中使用全局变量的缺点1. 复杂的代码维护过程2. 全局变量使单元测试变得痛苦3. 全局变量导致“面条&rdqu...
    99+
    2024-04-02
  • 永远不要在 MySQL 中使用 utf8,使用 utf8mb4 作为代替
    今天的错误:我试图在 MariaDB 「utf8」 编码的数据库中存储一个 UTF-8 字符串,Rails 出现了一个奇怪的错误:Incorrect string value: ‘\xF0\x9F\x98\x8...
    99+
    2022-11-16
    utf8mb4 mysql
  • 为什么要用debugger来调试代码?这样你能读懂各种源码!
    很多同学不知道为什么要用 debugger 来调试,console.log 不行么?还有,会用 debugger 了,还是有很多代码看不懂,如何调试复杂源码呢?这篇文章就来讲一下这篇文章就来讲一下为什么要用这些调试工具,希望对大家有所帮助!...
    99+
    2023-05-14
    debugger 前端 JavaScript Node.js
  • 为什么要使用代理IP
    这篇文章主要讲解了“为什么要使用代理IP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么要使用代理IP”吧!很多网络爬虫用户使用代理IP。为避免抓取数据和收集数据,请避免对ip进行密封。...
    99+
    2023-06-20
  • 为什么不需要在JavaScript使用switch 语句!
    本篇文章为大家展示了为什么不需要在JavaScript使用switch 语句!,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。没有 switch 就没有复杂的代码块s...
    99+
    2024-04-02
  • 为什么要在Ruby APP中使用Neo4j
    为什么要在Ruby APP中使用Neo4j,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。每天,我都需要储存大量的数据,而我可以使用很多工具,比如 Postgre...
    99+
    2023-06-17
  • 为什么代码重构在软件开发中很重要
    这篇文章主要讲解了“为什么代码重构在软件开发中很重要”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么代码重构在软件开发中很重要”吧! 什么是代...
    99+
    2024-04-02
  • 为什么这个程序在结果中打印421?
    php小编小新在这篇文章中将为您解答一个常见问题:“为什么这个程序在结果中打印421?”这个问题可能涉及到程序中的某些特定逻辑或错误。我们将通过分析可能的原因和解决方法来帮助您理解并解...
    99+
    2024-02-10
  • 为什么要使用http代理ip
    本篇内容介绍了“为什么要使用http代理ip”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一般来说,用浏览器直接连接其它Internet站点...
    99+
    2023-06-25
  • 为什么要停止在JavaScript中使用类
    为什么要停止在JavaScript中使用类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。多年来,OOP(面向对象编程)是软件工程中的事实上的标...
    99+
    2024-04-02
  • 为什么不要以DRY之名发明低代码DSL
    这篇文章主要讲解了“为什么不要以DRY之名发明低代码DSL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么不要以DRY之名发明低代码DSL”吧!DRY ...
    99+
    2024-04-02
  • 为什么我的代码需要这么长时间才能返回结果?
    哈喽!大家好,很高兴又见面了,我是编程网的一名作者,今天由我给大家带来一篇《为什么我的代码需要这么长时间才能返回结果?》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、...
    99+
    2024-04-05
  • 为什么代码规范要求SQL语句不要过多的join
    送分题 面试官:有操作过Linux吗? 我:有的呀 面试官:我想查看内存的使用情况该用什么命令 我:free 或者 top 面试官:那你说一下用free命令都可以看到啥信息 ...
    99+
    2024-04-02
  • 为何不要在MySQL中使用UTF-8编码方式详解
    MySQL的UTF-8编码方式 MySQL 从 4.1 版本开始支持 UTF-8,也就是 2003 年,然而目前流行的UTF-8 标准(RFC 3629)是在此之后规定的。正因此,才造就了MySQL中的U...
    99+
    2024-04-02
  • 在Activity中为什么要用managedQuery()
    在Activity中使用managedQuery()方法是为了在Android 3.0(API级别11)之前的版本中访问Conten...
    99+
    2023-09-01
    Activity
  • 网页设计中为什么要优化代码
    这篇文章主要介绍了网页设计中为什么要优化代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于网络是一个不断变化和不断发展的有机体,所以建立一个能和网络一起变化、成长的网站是...
    99+
    2023-06-12
  • 为什么要在LeetCode中使用Python的NumPy库?
    近年来,人工智能和机器学习的兴起,让编程语言的选择变得更加重要。在算法和数据结构领域,LeetCode已经成为了一个非常受欢迎的学习平台,许多程序员在这里刷题、学习和交流。而在这个过程中,Python的NumPy库也成为了许多程序员喜爱的选...
    99+
    2023-06-22
    numy leetcode 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作