Back
Featured image of post 开发技术和模式

开发技术和模式

开发技术革新

CGI 通用网关接口

通用网关接口(Common Gateway Interface, CGI) 是一种Web服务器与外部应用程序之间进行数据交互的标准协议。

  1. 背景
    • 早期的Web服务器只能响应浏览器发来的HTTP静态资源请求,并将存储在服务器中的静态资源返回给浏览器。
    • 随着Web技术的发展,动态技术逐渐出现,但Web服务器不能直接运行动态脚本。
    • 为了解决Web服务器与外部应用程序(即CGI程序)之间的数据互通问题,CGI(通用网关接口)应运而生。
  2. 工作原理
    • CGI允许Web服务器获取客户端提交的信息,并将其传递给服务端的CGI程序进行处理,然后将结果返回给客户端。
    • CGI通信系统由两部分组成:
      • HTML页面:显示在用户浏览器上的页面。
      • 运行在服务器上的CGI程序:处理客户端提交的数据。
    • 一次网页请求与响应的过程如下:
      • 浏览器通过URL请求一个网页,服务器返回该网页文件。
      • 通常我们看到的网页是动态生成的,比如PHP/JSP网页,根据请求参数不同返回不同内容。
      • 类似地,请求一个CGI程序时,CGI程序解析前端传递的参数,理解意图并返回数据,如HTML、XML或JSON等。
  3. 前端知识
    • 前端页面发送数据的方式包括:
      • 表单提交(HTML原生)。
      • JavaScript操作表单提交。
      • JavaScript通过Ajax请求数据。
<!-- 用户访问时就会访问,cgi-bin 下对应对的脚本 -->
<form action="/cgi-bin/hello.cgi" method="get">
    <table>
        <tr>
            <td>用户名:</td>
            <td><input name="username"/></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input name="password"/></td>
        </tr>
        <tr>
            <td><input type="submit" value="OK"/></td>
        </tr>
    </table>
</form>

MVC (Model-View-Controller)

MVC(Model-View-Controller) 是一种常见的软件架构模式,广泛应用于Web应用程序和桌面应用程序的开发。在这种模式下,应用程序被分为三个不同的部分:

  1. 模型(Model)
    • 负责处理应用程序的业务逻辑和数据。
    • 模型不包含与数据显示相关的代码,只关注数据的处理和业务规则的执行。
  2. 视图(View)
    • 负责显示数据给用户,以及与用户的交互功能,例如表单、网页等。
    • 视图是应用程序的外观,通常由HTML、JSP等实现。
  3. 控制器(Controller)
    • 类似于一个分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图。
    • 控制器连接视图和模型,协调它们之间的交互。

MVC模式的流程如下:

  1. 浏览器通过视图向控制器发出请求。
  2. 控制器接收请求,选择合适的模型进行处理。
  3. 处理完请求后,控制器再转发到视图,进行视图界面的渲染并做出最终响应。

在MVC模式中,视图可以用JSP、HTML、CSS实现,模型可以用JavaBean实现,而控制器通常使用Servlet来实现。这种分层架构使得应用程序更易于维护、扩展和重用。

另外,还有一个与MVC类似的架构模式叫做三层架构,它将应用程序分为表示层、业务逻辑层和数据访问层。这三层各自负责不同的功能,也有助于代码的分层和复用。

后台服务化与前端一致化

后台服务化前端一致化架构是现代软件开发中的两个关键概念。

  1. 后台服务化
    • 在传统的软件架构中,前端和后端是分离的。前端专注于页面渲染,而后台则处理业务逻辑。前后端之间最常见的交互方式是通过接口实现的。
    • 后台服务化的架构将后端业务逻辑进一步拆分成独立的服务。每个服务负责特定的功能,例如用户管理、订单处理、支付等。
    • 这种架构有助于提高系统的可维护性、扩展性和性能。它允许不同的团队并行开发不同的服务,而无需相互干扰。
  2. 前端一致化架构
    • 前端一致化架构旨在解决前端开发中的一些痛点。
    • 传统的前端开发模式中,前端工程师负责将设计图切成 HTML 页面,而后端工程师负责将 HTML 转换为 JSP 页面并处理逻辑和数据展示。
    • 这种模式导致了人员分工不明、效率低下以及不利于项目迭代等问题。
    • 前端一致化架构通过前后端分离,让前端专注于页面展示,后端只提供接口数据。这样可以降低耦合度,提高开发效率,同时满足多端应用开发的需求。

开发模式革新

瀑布开发

瀑布模型(也称为Waterfall Model)是一种软件生命周期模型,其开发过程按照一系列阶段的顺序展开,从系统需求分析开始,直到产品发布和维护。这个模型的名称来源于项目开发进程从一个阶段“流动”到下一个阶段,就像瀑布流水逐级下落。

瀑布模型的核心思想是将问题分解为工序,将功能的实现与设计分开,以便于分工协作。它将软件生命周期划分为以下六个基本活动,并规定了它们自上而下、相互衔接的固定次序:

  1. 制定计划:确定项目的范围、时间和资源。
  2. 需求分析:收集、分析和定义系统需求。
  3. 软件设计:设计系统的架构、模块和接口。
  4. 程序编写:根据设计规范编写代码。
  5. 软件测试:验证系统是否满足需求并修复错误。
  6. 运行维护:发布产品并进行后续维护。

瀑布模型的优点和缺点如下:

  • 优点
    • 强制开发人员采用规范的方法(如结构化技术)。
    • 严格规定每个阶段必须提交的文档。
    • 要求所有产品都必须经过质量保证小组的仔细验证。
  • 缺点
    • 瀑布模型依赖于书面的规格说明,用户只能通过文档来了解产品。
    • 可能导致最终开发出的软件产品不能真正满足用户的需求。
    • 不适合需求模糊的系统。

此外,还有一种加入迭代过程的瀑布模型,用于解决传统瀑布模型过于理想化的问题。在这种模型中,当后续阶段发现前面阶段的错误时,需要返回前面的阶段进行修改,以确保产品质量。

总之,瀑布模型在软件开发中曾经广泛采用,但现在更多的团队倾向于使用敏捷方法,以更灵活和迭代的方式开发软件。

敏捷开发

敏捷开发是一种高效的软件开发方法,起源于美国。许多大型公司为了提高产品的开发效率,已经开始运用敏捷开发。让我用通俗易懂的语言解释一下:

  1. 迭代开发
    • 敏捷开发的核心是迭代开发
    • 迭代开发通过短期增量(通常称为冲刺)的方式来完成工作,从而缩短开发周期。
    • 每个冲刺通常为一到四周。
    • 在敏捷开发中,软件项目被切分成多个子项目,每个子项目都经过测试,具备可视、可集成和可运行的特征。
    • 换言之,就是把一个大项目分成多个相互联系、但也可独立运行的小项目,并分别完成。在此过程中,软件一直处于可使用状态。
  2. 优势和不足
    • 优势:
      • 敏捷开发将一艘大船变成许多条小船,每条小船各司其职,分配小目标,所有的小目标合起来就能完成大目标。
      • 效率高,每个人职责分明。
    • 不足:
      • 小团队难以拥有开阔的视野,看不到全局。
      • 对于不可分割的大需求,敏捷开发不再合适。
      • 敏捷开发适用于成熟的应用做高效的版本迭代,对于初创型或快速增长的公司不适合。
  3. 混合式开发
    • 对于大需求,可以采用传统的瀑布式开发。
    • 对于小优化和小迭代,可以采用敏捷开发。
    • 现在很多大型公司结合了两者的优势。
  4. 产品经理在敏捷开发团队中的不同
    • 敏捷开发中,产品经理有更多时间思考产品细节,不用花太多时间在沟通和传递需求上。
    • 敏捷开发让产品经理更专注于大方向的事务。

总之,敏捷开发是一种高效、迭代式的开发方法,适用于成熟的应用做版本迭代。

精益开发

精益开发是一种用于开发产品和服务的方法论,旨在缩短产品开发周期,并快速发现产品创意构思是否可行。它通过采用商业假设驱动的实验、迭代产品发布和验证学习的组合来实现。

让我们深入了解一下精益开发的核心思想和原则:

  1. 杜绝浪费
    • 将所有的时间花在能够增加客户价值的事情上。
    • 除去不必要的环节,专注于创造价值的活动。
  2. 推迟决策
    • 保持可选方案的开放性,但时间不能过长。
    • 尽可能多地提出可行方案,但不要拖延决策。
  3. 加强学习
    • 使用科学的学习方法。
    • 培养有战斗力的团队,持续学习和改进。
  4. 快速交付
    • 当客户索取价值时应立即交付价值。
    • 缩短迭代周期,提供稳定可运行且有价值的软件。
  5. 打造精品
    • 使用恰当的方法确保质量。
    • 追求完美,不断改进产品。
  6. 授权团队
    • 让创造增值的员工充分发挥自己的潜力。
    • 培养健康的团队,不被琐碎的细节束缚。
  7. 优化整体
    • 防止以损害整体为代价而优化部分的倾向。
    • 考虑局部优化对整体利益的影响。

总之,精益开发是一种追求尽善尽美、注重价值创造和持续改进的方法,适用于不同行业和产品开发领域。

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy
© Licensed Under CC BY-NC-SA 4.0