开发技术革新
CGI 通用网关接口
通用网关接口(Common Gateway Interface, CGI) 是一种Web服务器与外部应用程序之间进行数据交互的标准协议。
- 背景:
- 早期的Web服务器只能响应浏览器发来的HTTP静态资源请求,并将存储在服务器中的静态资源返回给浏览器。
- 随着Web技术的发展,动态技术逐渐出现,但Web服务器不能直接运行动态脚本。
- 为了解决Web服务器与外部应用程序(即CGI程序)之间的数据互通问题,CGI(通用网关接口)应运而生。
- 工作原理:
- CGI允许Web服务器获取客户端提交的信息,并将其传递给服务端的CGI程序进行处理,然后将结果返回给客户端。
- CGI通信系统由两部分组成:
- HTML页面:显示在用户浏览器上的页面。
- 运行在服务器上的CGI程序:处理客户端提交的数据。
- 一次网页请求与响应的过程如下:
- 浏览器通过URL请求一个网页,服务器返回该网页文件。
- 通常我们看到的网页是动态生成的,比如PHP/JSP网页,根据请求参数不同返回不同内容。
- 类似地,请求一个CGI程序时,CGI程序解析前端传递的参数,理解意图并返回数据,如HTML、XML或JSON等。
- 前端知识:
- 前端页面发送数据的方式包括:
- 表单提交(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应用程序和桌面应用程序的开发。在这种模式下,应用程序被分为三个不同的部分:
- 模型(Model):
- 负责处理应用程序的业务逻辑和数据。
- 模型不包含与数据显示相关的代码,只关注数据的处理和业务规则的执行。
- 视图(View):
- 负责显示数据给用户,以及与用户的交互功能,例如表单、网页等。
- 视图是应用程序的外观,通常由HTML、JSP等实现。
- 控制器(Controller):
- 类似于一个分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图。
- 控制器连接视图和模型,协调它们之间的交互。
MVC模式的流程如下:
- 浏览器通过视图向控制器发出请求。
- 控制器接收请求,选择合适的模型进行处理。
- 处理完请求后,控制器再转发到视图,进行视图界面的渲染并做出最终响应。
在MVC模式中,视图可以用JSP、HTML、CSS实现,模型可以用JavaBean实现,而控制器通常使用Servlet来实现。这种分层架构使得应用程序更易于维护、扩展和重用。
另外,还有一个与MVC类似的架构模式叫做三层架构,它将应用程序分为表示层、业务逻辑层和数据访问层。这三层各自负责不同的功能,也有助于代码的分层和复用。
后台服务化与前端一致化
后台服务化和前端一致化架构是现代软件开发中的两个关键概念。
- 后台服务化:
- 在传统的软件架构中,前端和后端是分离的。前端专注于页面渲染,而后台则处理业务逻辑。前后端之间最常见的交互方式是通过接口实现的。
- 后台服务化的架构将后端业务逻辑进一步拆分成独立的服务。每个服务负责特定的功能,例如用户管理、订单处理、支付等。
- 这种架构有助于提高系统的可维护性、扩展性和性能。它允许不同的团队并行开发不同的服务,而无需相互干扰。
- 前端一致化架构:
- 前端一致化架构旨在解决前端开发中的一些痛点。
- 传统的前端开发模式中,前端工程师负责将设计图切成 HTML 页面,而后端工程师负责将 HTML 转换为 JSP 页面并处理逻辑和数据展示。
- 这种模式导致了人员分工不明、效率低下以及不利于项目迭代等问题。
- 前端一致化架构通过前后端分离,让前端专注于页面展示,后端只提供接口数据。这样可以降低耦合度,提高开发效率,同时满足多端应用开发的需求。
开发模式革新
瀑布开发
瀑布模型(也称为Waterfall Model)是一种软件生命周期模型,其开发过程按照一系列阶段的顺序展开,从系统需求分析开始,直到产品发布和维护。这个模型的名称来源于项目开发进程从一个阶段“流动”到下一个阶段,就像瀑布流水逐级下落。
瀑布模型的核心思想是将问题分解为工序,将功能的实现与设计分开,以便于分工协作。它将软件生命周期划分为以下六个基本活动,并规定了它们自上而下、相互衔接的固定次序:
- 制定计划:确定项目的范围、时间和资源。
- 需求分析:收集、分析和定义系统需求。
- 软件设计:设计系统的架构、模块和接口。
- 程序编写:根据设计规范编写代码。
- 软件测试:验证系统是否满足需求并修复错误。
- 运行维护:发布产品并进行后续维护。
瀑布模型的优点和缺点如下:
- 优点:
- 强制开发人员采用规范的方法(如结构化技术)。
- 严格规定每个阶段必须提交的文档。
- 要求所有产品都必须经过质量保证小组的仔细验证。
- 缺点:
- 瀑布模型依赖于书面的规格说明,用户只能通过文档来了解产品。
- 可能导致最终开发出的软件产品不能真正满足用户的需求。
- 不适合需求模糊的系统。
此外,还有一种加入迭代过程的瀑布模型,用于解决传统瀑布模型过于理想化的问题。在这种模型中,当后续阶段发现前面阶段的错误时,需要返回前面的阶段进行修改,以确保产品质量。
总之,瀑布模型在软件开发中曾经广泛采用,但现在更多的团队倾向于使用敏捷方法,以更灵活和迭代的方式开发软件。
敏捷开发
敏捷开发是一种高效的软件开发方法,起源于美国。许多大型公司为了提高产品的开发效率,已经开始运用敏捷开发。让我用通俗易懂的语言解释一下:
- 迭代开发:
- 敏捷开发的核心是迭代开发。
- 迭代开发通过短期增量(通常称为冲刺)的方式来完成工作,从而缩短开发周期。
- 每个冲刺通常为一到四周。
- 在敏捷开发中,软件项目被切分成多个子项目,每个子项目都经过测试,具备可视、可集成和可运行的特征。
- 换言之,就是把一个大项目分成多个相互联系、但也可独立运行的小项目,并分别完成。在此过程中,软件一直处于可使用状态。
- 优势和不足:
- 优势:
- 敏捷开发将一艘大船变成许多条小船,每条小船各司其职,分配小目标,所有的小目标合起来就能完成大目标。
- 效率高,每个人职责分明。
- 不足:
- 小团队难以拥有开阔的视野,看不到全局。
- 对于不可分割的大需求,敏捷开发不再合适。
- 敏捷开发适用于成熟的应用做高效的版本迭代,对于初创型或快速增长的公司不适合。
- 优势:
- 混合式开发:
- 对于大需求,可以采用传统的瀑布式开发。
- 对于小优化和小迭代,可以采用敏捷开发。
- 现在很多大型公司结合了两者的优势。
- 产品经理在敏捷开发团队中的不同:
- 敏捷开发中,产品经理有更多时间思考产品细节,不用花太多时间在沟通和传递需求上。
- 敏捷开发让产品经理更专注于大方向的事务。
总之,敏捷开发是一种高效、迭代式的开发方法,适用于成熟的应用做版本迭代。
精益开发
精益开发是一种用于开发产品和服务的方法论,旨在缩短产品开发周期,并快速发现产品创意构思是否可行。它通过采用商业假设驱动的实验、迭代产品发布和验证学习的组合来实现。
让我们深入了解一下精益开发的核心思想和原则:
- 杜绝浪费:
- 将所有的时间花在能够增加客户价值的事情上。
- 除去不必要的环节,专注于创造价值的活动。
- 推迟决策:
- 保持可选方案的开放性,但时间不能过长。
- 尽可能多地提出可行方案,但不要拖延决策。
- 加强学习:
- 使用科学的学习方法。
- 培养有战斗力的团队,持续学习和改进。
- 快速交付:
- 当客户索取价值时应立即交付价值。
- 缩短迭代周期,提供稳定可运行且有价值的软件。
- 打造精品:
- 使用恰当的方法确保质量。
- 追求完美,不断改进产品。
- 授权团队:
- 让创造增值的员工充分发挥自己的潜力。
- 培养健康的团队,不被琐碎的细节束缚。
- 优化整体:
- 防止以损害整体为代价而优化部分的倾向。
- 考虑局部优化对整体利益的影响。
总之,精益开发是一种追求尽善尽美、注重价值创造和持续改进的方法,适用于不同行业和产品开发领域。