【问题标题】:How is web programming different from back-end programming?Web 编程与后端编程有何不同?
【发布时间】:2009-02-23 23:09:05
【问题描述】:

在我职业生涯的大部分时间里,我一直从事单线程业务逻辑/后端编程。我现在想学习 Web 编程,但想知道 Web 编程与非 GUI 编程有何不同(例如编写 API 或文件处理应用程序)。我不是在谈论 GUI 设计方面(有人已经问过这个问题 here),而是更多关于编程复杂性。

在我做web应用程序的少数场合,我觉得web应用程序相对来说更加不确定和不可预测(例如,由于web应用程序的事件驱动、多线程模型,有几个需要处理的事件和动作的排列和组合)。

您认为 Web 编程与非 GUI 应用程序有哪些不同的基本特征?后端开发人员在开发 Web 应用程序时可能会犯哪些陷阱/错误?

编辑 我对后端编程的定义是指非 GUI 应用程序,如 API 或文件处理批处理应用程序,它们解析大型数据文件、读取记录、对数据进行大量数字运算并将结果输出到另一个文件中或数据库。另一个示例可能是日期和时间实用程序库。

【问题讨论】:

  • 我不明白您与“后端编程”的关系。您是否试图区分“桌面”和“网络”开发?
  • 没有。我试图区分“非 GUI 编程”和“网络编程”。见编辑。
  • @Rahul,您是否认为控制台应用程序是“后端”,因为它们没有 GUI?
  • @Out Into Space,我会考虑诸如“前端”或 UI 之类的程序(我承认我错误地使用了 GUI 一词。我的意思是 UI)。正如其他人在回复中提到的那样,表示层将程序的复杂性增加了几个数量级。

标签: language-agnostic


【解决方案1】:

Web 编程的最大挑战是处理状态。 HTTP 是一种无状态协议。这会使维护状态比在桌面应用程序中更具挑战性。因此,Web 应用程序往往具有不同的生命周期。每个 Web 开发平台处理这个问题的方式都有些不同,但它们都需要以某种方式处理它。

【讨论】:

  • 许多桌面应用程序使用 HTTP。
  • 是的,所以这些桌面应用程序是 Jim Petkus 所说的受益者。
  • 同意。 HTTP 的无状态是最糟糕的事情。
  • 你应该详细说明它的不同处理方式
【解决方案2】:

Web 应用程序通常感觉像是单线程应用程序,因为您(应用程序开发人员)很少创建自己的线程。如果有的话,实际上要容易得多,因为 Web 事务的无状态特性意味着您每次都必须从数据库中加载页面的数据。因此,您不必担心并发性,因为“随便什么”通常就足够了。

Web 开发的最大问题是您必须随着时间的推移积累的所有背景知识。你如何布置网页?你如何使用 CSS 设置样式?如何从查询字符串中获取参数?如何在 JavaScript 中验证字段值?所有这些东西实际上都很容易学习,但是它们太多了,这可能是一个真正的痛苦。

【讨论】:

    【解决方案3】:

    我目睹的应用程序开发人员在进入 Web 时所犯的最大陷阱是没有考虑他们的代码成本。要么他们滥用 MySQL 导致 RDBMS 陷入瘫痪,要么他们编写的代码占用了太多内存,要么他们制作的前端页面太大而无法适应拨号/手机或低端宽带/dsl 管道。

    有时在编写繁重的页面时无法避免,但可以考虑尝试尽可能多地缓存,或者在编写会被大量点击的页面时,他们不会努力进行分析和优化在他们出门之前询问。

    这并不是因为这些人很愚蠢,只是缺乏经验和意识,他们需要玩得很好,写的代码有点精简。

    【讨论】:

      【解决方案4】:

      后端编程比 Web 编程简单得多。 (您已被警告过!)Web 编程是最容易向所有人炫耀的。

      【讨论】:

        【解决方案5】:

        大多数网站也有后端组件。典型的结构类似于:

        1. 用户界面 - html/css/javascript
        2. 控制器 - 如果使用 MVC
        3. 业务逻辑/服务 - 这是后端
        4. 数据库 - 这也是后端

        因此,构建网站仍然意味着大量的后端工作。关于 UI,主要区别在于您需要对设计和布局有很好的了解才能做好。 html/css 技术本身非常简单。

        【讨论】:

        • 使用一个好的 MVC 框架意味着你可以很好地与设计部分分离。了解 CSS/HTML 会有所帮助(如果没有别的,只是为了知道可能发生的事情).. 但将实际的“让设计看起来不错”留给设计师。
        【解决方案6】:

        HTML 实际上是为了传递物理论文而开发的。您仍然可以在一些旧的元标记中看到它。无论如何,不​​同之处在于 Web 编程是无状态的,而胖客户端开发则不是。

        正如您熟练地指出的那样,这一切都是由事件驱动的。真正的 javascript 通过创造一种有状态的环境的错觉,稍微搞砸了 Web 开发,但最终一切都归结为简单的 HTML。

        开始学习永远不会太晚,我会说开始制作一些静态 HTML 页面并升级到 MVC 框架,我建议使用 Microsoft MVC 框架。它非常棒,还有其他你可以使用的东西,比如 ASP.Net Webforms,但你不会通过将东西拖放到设计器上来学习任何东西;)。

        【讨论】:

        • 我从来不知道关于物理论文——你指的是哪些元标签?
        • 欧洲核子研究中心的科学家 Tim Berners-Lee 于 1990 年发明了万维网 (WWW)。万维网,正如它被亲切地称为,最初的构想是为了满足人与人之间自动信息共享的需求。在世界各地不同大学工作的科学家。
        • 标签包括标题、描述、关键字、分布、资源类型等。这些都与描述文档有关。很惊讶没有 ISBN 元标记:D
        【解决方案7】:

        Web 和 GUI 应用程序与人类交互 .. 后端应用程序与服务和数据库交互 .. 因此,您的规范需要包括对用户心理模型的重要考虑 - 使事物表现得像人们预期 他们到。这样做——了解用户的想法——并不总是容易或合乎逻辑的。你可能有优雅的算法解决方案,但根本无法参与,因为人们并不总是逻辑思考。很多时候,相当优雅的用户界面在编码方面非常扭曲......这与系统->系统编程

        非常相反

        根据问题空间,这在很大程度上可能是艺术而非科学。

        【讨论】:

          【解决方案8】:

          Web 编程的一个考虑因素(在众多考虑因素中)是,用户不仅是愚蠢的(并非他们都是愚蠢的,但您总是必须考虑到这一点),他们有时(假设总是)是彻头彻尾的恶意和讨厌的,并将尽其所能摧毁您的应用程序、您的数据库、您的周末、您的理智……

          像企鹅拍摄时的小修女一样偏执。不要相信你的用户。

          【讨论】:

          • “企鹅拍摄中的小修女”+1 LOL
          【解决方案9】:

          另一个考虑因素是根据您的定义进行后端编程更容易测试。

          一旦您开始进行网络编程,您就会受制于各种浏览器对同一代码的不同解释。此外,用户通过鼠标和键盘的输入,可以通过多种方式来破坏您制作的内容。

          【讨论】:

            【解决方案10】:

            Web 编程不是后端编程。它在前端显示内容,即网络。

            您是否另有定义?

            编辑

            Web 编程让您以一致、直观的方式向所有人呈现数据。后端编码意味着构建该数据,以相同的方式呈现,但不呈现它。

            【讨论】:

            • 我不会尝试以其他方式定义它。请参阅编辑以进行澄清。我理解其中的区别,但我试图找出 Web/GUI 编程和非 GUI 编程之间“编程复杂性”的区别。
            • Web 编程让您以一致、直观的方式向所有人呈现数据。后端编码意味着构建该数据,以相同的方式呈现,但不呈现它。
            【解决方案11】:

            根据您对“后端编程”的定义,您的问题不仅适用于 Web 应用程序,还适用于任何 GUI 应用程序。

            这取决于我们谈论的是哪种 GUI 应用程序。例如:

            • 内部业务应用程序往往涉及大量业务流程工作流逻辑、记录保存和不同系统之间的互操作性。不需要花哨的算法或数字运算。您的受众有限,因此性能不是什么大问题,但跨平台兼容性很重要,因此这些往往是 Web 应用程序。您主要关心的是如何轻松地将业务系统捆绑在一起,并保持 API 分层以确保 GUI 代码不必处理任何业务逻辑代码。
            • 公共网站(例如这个)往往涉及较少的正式架构,而更多的是“让这个很酷的功能发挥作用,这样我们就可以吸引更多的访问者”的心态。同样,除非性能是一个问题,否则没有数字运算或算法。对于 Slashdot 或 Google 等广受欢迎的网站而言,性能更是一个问题,因此,如果您预计快速增长,提前设计可扩展性是值得的。
            • 公共电子商务网站有点像上述两种情况:功能和性能很重要,但同样重要的是它下面的结构化架构,它将所有商业业务系统(采购、供应商、购物车、支付网关等)

            对于实际的 GUI 部分,应用程序类型的复杂性决定了 GUI 代码的复杂程度。对于您的需求经常变化的高度复杂的嵌套 GUI,很容易陷入将太多 GUI 内容放在一个页面中的陷阱。很快页面就超过了大多数人的复杂度阈值,使得页面非常难以维护。提前考虑如何将 GUI 的不同部分分成单独的组件,然后将它们绑定在一起是值得的。如果您是 GUI 编程新手,请阅读一些关于模型-视图-控制器 (MVC) 模式的文章。

            对于大多数页面都相当静态的简单网站,这个问题不会出现太多,因为每个单独的页面都易于维护。

            【讨论】:

              【解决方案12】:

              在 Dijkstra 的“goto 被认为有害”为人所知之前,大多数 Web 编程都是按照 70 年代初期流行的风格完成的。

              【讨论】:

                猜你喜欢
                • 2012-03-18
                • 2016-04-02
                • 2012-06-13
                • 1970-01-01
                • 2013-08-29
                • 2011-11-27
                • 2010-11-03
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多