首页 » 软件开发 » 程序员搞Web开发还要不要重复造轮子?(项目轮子开发框架程序员)

程序员搞Web开发还要不要重复造轮子?(项目轮子开发框架程序员)

雨夜梧桐 2024-07-23 23:30:59 0

扫一扫用手机浏览

文章目录 [+]

本周的主题并非是不鼓励自主创新,而是推崇自主创新,毕竟只有自主创新才能创造出属于自己的技术,才能提前避免一些风险,对抗现实世界的变化带来的动荡与不安,提高抗风险能力。
“不要重复造轮子”并不是适用核心技术和空白领域,这方面还是鼓励与支持“造轮”一说。

只是时至今日,国内的软件行业已然不同于过往的空白期,为了在更快的时间内进步,我们需要快速学习造轮子的套路。
换句话说, “站在巨人的肩膀上会让你事半功倍” 。
如果你遇到问题,可以尝试这样一个角度:不要只想着自己从头搞定,先去看看有没有前人经验,看看是否有什么人在什么地方遇到过类似的问题,找到这个人,和对方建立联系获取相关信息,能够帮助你节约非常多的时间来做更重要的事情。

这其中学习新技术、新框架是十分重要一方面,另一方面就是不能只是简单地学习这些技术、框架是怎么用的,要知其然,还要知其所以然。
如果想要开发一套稳定的,容易维护的系统,在使用“轮子”的时候,就需要对轮子有足够的了解。
知道这个“轮子”适用于什么样的场景,有什么样的特点、优点,会有什么样缺点。
这样才能做到扬长避短,更好地使用轮子。
因此今天,我们以此为契机,给大家分享一些优秀的开源 Web 开发框架,在先行者的经验上,一同学习、进步。
如果你对“不必重复造轮子”或者下列“ Web 开发框架”项目有更深入的见解,欢迎大家在评论中一同讨论

程序员搞Web开发还要不要重复造轮子?(项目轮子开发框架程序员) 软件开发
(图片来自网络侵删)
JavaJFinal

开源许可证: Apache-2.0

项目作者: JFinal

项目地址: https://gitee.com/jfinal/jfinal

推荐原因: JFinal 是一款基于 Java 语言的极速 WEB + ORM 框架,拥有 Java 语言优势的同时再拥有 Ruby、Python 等动态语言的开发效率。

主要编程语言: Java

项目示例:

1.控制器(支持 Enjoy、JSP、Velocity、JSON 等等以及自定义视图渲染)

@Before(BlogInterceptor.class)public class BlogController extends Controller { @Inject BlogService service; public void index() { set("blogPage", service.paginate(getParaToInt(0, 1), 10)); render("blog.html"); } public void add() { } @Before(BlogValidator.class) public void save() { getModel(Blog.class).save(); redirect("/blog"); } public void edit() { set("blog", service.findById(getParaToInt())); } @Before(BlogValidator.class) public void update() { getModel(Blog.class).update(); redirect("/blog"); } public void delete() { service.deleteById(getParaToInt()); redirect("/blog"); }}

2.Service 所有业务与 sql 全部放在 Service 层。

public class BlogService { private Blog dao = new Blog().dao(); public Page<Blog> paginate(int pageNumber, int pageSize) { return dao.paginate(pageNumber, pageSize, "select ", "from blog order by id asc"); } public Blog findById(int id) { return dao.findById(id); } public void deleteById(int id) { dao.deleteById(id); }}

3.Model(无 xml、无 annotaion、无 attribute)

public class Blog extends Model<Blog> {}

4.Validator(API 引导式校验,比 xml 校验方便 N 倍,有代码检查不易出错)

public class BlogValidator extends Validator { protected void validate(Controller controller) { validateRequiredString("blog.title", "titleMsg", "请输入Blog标题!"); validateRequiredString("blog.content", "contentMsg", "请输入Blog内容!"); } protected void handleError(Controller controller) { controller.keepModel(Blog.class); }}

5.拦截器(在此 demo 中仅为示例,本 demo 不需要此拦截器)

public class BlogInterceptor implements Interceptor { public void intercept(Invocation inv) { System.out.println("Before invoking " + inv.getActionKey()); inv.invoke(); System.out.println("After invoking " + inv.getActionKey()); }}ymate-platform-v2

开源许可证: Apache-2.0

项目作者: 有理想的鱼

项目地址: https://gitee.com/suninformation/ymate-platform-v2

推荐原因: ymate-platform-v2 是一个简单、易用的轻量级 Java 应用开发框架

主要编程语言: Java

项目模块功能:

HServer

开源许可证: Apache-2.0

项目作者: HServer

项目地址: https://gitee.com/HServer/HServer

推荐原因: HServer 是一个开发灵活,轻量级,低入侵,高并发的新型 Web 开发框架。

主要编程语言: Java

项目原理及流程:

C++drogon

开源许可证: MIT

项目作者: an-tao

项目地址: https://gitee.com/an-tao/drogon

推荐原因: 基于 C++14/17 的跨平台、高性能 HTTP Web 应用框架

主要编程语言: C++

操作案例:

1.创建一个 HttpSimpleController 对象。

/// The TestCtrl.h file#pragma once#include <drogon/HttpSimpleController.h>using namespace drogon;class TestCtrl:public drogon::HttpSimpleController<TestCtrl>{public: virtual void asyncHandleHttpRequest(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback) override; PATH_LIST_BEGIN PATH_ADD("/test",Get); PATH_LIST_END};/// The TestCtrl.cc file#include "TestCtrl.h"void TestCtrl::asyncHandleHttpRequest(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback){ //write your application logic here auto resp = HttpResponse::newHttpResponse(); resp->setBody("<p>Hello, world!</p>"); resp->setExpiredTime(0); callback(resp);}

2.代码都可以由 drogon_ctl命令创建后这样创建控制器:

/// The header file#pragma once#include <drogon/HttpSimpleController.h>using namespace drogon;class JsonCtrl : public drogon::HttpSimpleController<JsonCtrl>{ public: virtual void asyncHandleHttpRequest(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) override; PATH_LIST_BEGIN //list path definitions here; PATH_ADD("/json", Get); PATH_LIST_END};/// The source file#include "JsonCtrl.h"void JsonCtrl::asyncHandleHttpRequest(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback){ Json::Value ret; ret["message"] = "Hello, World!"; auto resp = HttpResponse::newHttpJsonResponse(ret); callback(resp);}

3.通过 HttpController 类创建一个 RESTful API:

/// The header file#pragma once#include <drogon/HttpController.h>using namespace drogon;namespace api{namespace v1{class User : public drogon::HttpController<User>{ public: METHOD_LIST_BEGIN //use METHOD_ADD to add your custom processing function here; METHOD_ADD(User::getInfo, "/{id}", Get); //path is /api/v1/User/{arg1} METHOD_ADD(User::getDetailInfo, "/{id}/detailinfo", Get); //path is /api/v1/User/{arg1}/detailinfo METHOD_ADD(User::newUser, "/{name}", Post); //path is /api/v1/User/{arg1} METHOD_LIST_END //your declaration of processing function maybe like this: void getInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const; void getDetailInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const; void newUser(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, std::string &&userName); public: User() { LOG_DEBUG << "User constructor!"; }};} // namespace v1} // namespace apicppweb

项目作者: 寻根

项目地址: https://gitee.com/xungen/cppweb

推荐原因: cppweb 是基于 C++ 开发的 Web 服务器,支持 C/C++、Python、Java 等多语言混合开发 Web 应用。

主要编程语言: C++

项目功能展示:

PHPHyperf

开源许可证: MIT

项目作者: hyperf

项目地址: https://gitee.com/hyperf/hyperf

推荐原因: Hyperf 是一款基于 Swoole 4.5+ 实现的高性能、高灵活性的 PHP 持久化框架,特别适用于微服务和中间件的开发。

主要编程语言: PHP

实操教程: 请参考 https://course.swoole-cloud.com/videos/5/new?from=hyperf.io 查看详细教程进行操作。

ThinkPHP

开源许可证: Apache-2.0

项目作者: ThinkPHP

项目地址: https://gitee.com/top-think/think

推荐原因: ThinkPHP 是一家拥有 15 年历史的老牌 PHP 开源框架

主要编程语言: PHP

项目操作方法演示:

这是一个典型的 Index 控制器的操作方法定义,包含了两个操作方法:若不使用任何参数,如果定义了一个非可选参数,并且不是对象类型,则该参数必须通过用户请求传入,如果是 URL 请求,则通常是通过当前的请求传入,操作方法的参数支持依赖注入。

<?phpnamespace app\controller;class Index{ public function index() { return 'index'; } public function hello(string $name) { return 'Hello,'.$name; }}TimoPHP

开源许可证: BSD-3-Clause

项目作者: tomener

项目地址: https://gitee.com/tomener/TimoPHP

推荐原因: TimoPHP 是一个快速、灵活的 PHP Web 开发框架。

主要编程语言: PHP

目录结构:

/data |-TimoSNS 项目目录(自己项目名称,比如用TimoPHP开发的社区应用,叫TimoSNS,自定义) | |-app 应用目录 | | |-cli 命令行 | | |-api 移动端 | | | |-controller 控制器目录 | | | |_config.php 项目配置文件 | |-business 公共业务逻辑 | |-cache 运行时缓存目录 | |-middleware 中间件 | |-provider 服务提供者目录 | |-component 组件目录 | |-config 公共配置目录 | | |-dev 开发环境配置目录 | | |-pro 线上环境配置目录 | | |-test 测试环境配置目录 | |-lib 自定义类库 | |-logs 日志目录 | |-model 模型目录 | |-public WEB目录(对外访问目录)名称自定义,如wwwroot、public | | |-api 小程序 | | | |_index.php 小程序入口文件 | |-send 推送(微信、小程序、android、IOS) | |-service 公共服务目录 | |-task 异步任务 | |-vendor composer安装类库目录 | |-bootstrap.php 整个项目的启动文件 | |_composer.json |-TimoPHP 框架,和项目在同一级目录 JavaScripttitbit

开源许可证: MulanPSL-2.0

项目作者: 疯狂的机械键盘

项目地址: https://gitee.com/daoio/titbit

推荐原因: titbit 是一款 Node.js 环境的 Web 后端框架,支持 HTTP/HTTPS/HTTP2,也支持配置切换。

主要编程语言: JavaScript

流程展示:

GoGinSkeleton

开源许可证: MIT

项目作者: 张奇峰

项目地址: https://gitee.com/daitougege/GinSkeleton

推荐原因: 这是一个基于 Go 语言 Gin 框架封装的 Web 项目骨架。

主要编程语言: Go

项目流程展示:

1.主线逻辑图:

2.核心主线调用链图

3.后台骨架图

go-zero

开源许可证: MIT

项目作者: kevwan

项目地址: https://gitee.com/kevwan/go-zero

推荐原因: go-zero 是一个集成了各种工程实践的 Web 和 RPC 框架。

主要编程语言: Go

项目架构展示:

orange

开源许可证: Apache-2.0

项目作者: qiqi

项目地址: https://gitee.com/zhucheer/orange

推荐原因: orange 是一款基于 Golang 语言的 web 开发框架

编程语言: Go

项目原理演示:

DelphiDelphiWebMVC

开源许可证: Apache-2.0

项目作者: PRSoft

项目地址: https://gitee.com/pearroom/DelphiWebMVC

推荐原因: 据项目作者表示,Delphi 在 Web 系统开发上没有像 Java 或 PHP 这样方便,对于一直使用 Delphi 的工程师来说是个遗憾,因此使用 Delphi 技术开发了一套 Web 框架,使用 MVC 模式,让工程师只需把精力放在模型与视图的设计上。

主要编程语言: Delphi

项目 Demo 演示:

注:此项目详细操作请参考作者博客:https://my.oschina.net/delphimvc

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读3 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0