如何创建自己的 Mini MVC 框架(如何无框架写个 Web App)

简介: 如何创建自己的 Mini MVC 框架(如何无框架写个 Web App)

我们都知道 Rails、Grape 等等都是 Rack App 框架。

所谓 Rack App 是指遵循了 Rack 协议的 App,其中最主要的,或者最容易理解的一点就是,他们有共同的入口点:即 config.ru 文件。

其中,对于 config.ru 的规定是:

  1. run 命令后面加一个可以响应 call 方法的一个实例
  2. 这个 call 方法需要返回一个数组,其中,第一个为 HTTP 状态码,第二个为 Hash 组成的,代表 HTTP 协议中的 Headers,第三个是个字符串数组,数据个数为 1。 示例:[200, { 'Content-Type' => 'application/json'}, ["I am html body"]]

对于 Ruby 来说,具有call 这个方法的默认的就有 Proc, proc, lambda 等等,当然也可以自己声明。

依据上面这些基础知识,我们可以实现一个所谓的 Web App:

# config.ru
run proc {
      [200, {'Content-Type' => 'text/html'},
        ["Hello, world!"]]
}

这时候我们在这个文件所在的目录下运行:

$ rackup -p 300

我们就能在浏览器里面查看了: http://localhost:3000

到目前来说,我们算是可以实现一个简单的 Web APP 了。

那么我们如何实现一个 MVC 分层的 Web App 呢?

首先,我们可以按照 Rails 框架的思路,做一个分层: 数据库我们用 Sqlite 3,

# app/model/user.rb
class User
  attr_accessor :name, :email
  def initialize(name, email)
    @name = name
    @email = email
  end
  def self.all
    @users = []
    db = SQLite3::Database.new "toyapp.db"
    db.execute('select * from users where 1 = 1 limit 1;') do |row|
      @users << self.new(row[1], row[2])
    end
    @users
  end
  #method_missing
end

View 层我们用 ERB 来实现:

# index.html.erb
<div>
  name: <%= @user.name %>
  <br>
  email: <%= @user.email %>
</div>

Controller 层,我们简单的模仿 Rails:

class UsersController
  def index
    @user = User.all[0]
    puts @user
    template = File.open("./index.html.erb").read
    template = ERB.new(template)
    template.result(binding)  # 通过 binding 切换作用域
  end
end

我们通过 Application 可以把这些串起来:

class Application
  def call(env)   # env 参数是 Rack 默认会传过来的,其中包含了一个请求常见的信息
    [ 200,
      {'Content-Type'=>'text/html'},
      [UsersController.new.index]
    ]
  end
end

然后我们通过 Rack 来运行我们的 App:

# config.ru
run Application.new

现在,我们可以来试试我们的 Web APP

$ rackup -p 3000

屏幕截图 2023-09-06 115436.png

源码地址:https://github.com/rocLv/no-framework-app.git

感兴趣的也可以找我来索要视频录像,视频剪辑好以后会发布在这。


相关文章
|
19天前
|
开发框架 JavaScript 前端开发
如何选择合适的Web开发框架?
【9月更文挑战第1天】如何选择合适的Web开发框架?
43 1
|
12天前
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
65 3
|
18天前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
44 7
|
16天前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
19天前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
29 0
|
19天前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
23 0
|
19天前
|
数据库 开发者 Java
数据战争:Hibernate的乐观与悲观锁之争,谁将主宰并发控制的王座?
【8月更文挑战第31天】在软件开发中,数据一致性至关重要,尤其是在多用户并发访问环境下。Hibernate 作为 Java 社区常用的 ORM 框架,提供了乐观锁和悲观锁机制来处理并发问题。乐观锁假设数据不易冲突,通过版本号字段 (`@Version`) 实现;悲观锁则假定数据易冲突,在读取时即加锁。选择哪种锁取决于具体场景:乐观锁适合读多写少的情况,减少锁开销;悲观锁适合写操作频繁的场景,避免数据冲突。正确应用这些机制可提升应用程序的健壮性和效率。
26 0
|
19天前
|
Java Maven Android开发
解锁Web开发新技能:从零开始的Struts 2之旅——让你的Java编程之路更加宽广,首个应用实例带你飞!
【8月更文挑战第31天】对于初学者,掌握 Struts 2 框架不仅能提升 Web 开发能力,还能深入了解 MVC 架构。Struts 2 是一个基于 Servlet 的 Java 框架,提供表单验证、文件上传、国际化等功能,便于快速构建易维护的 Web 应用。本文通过示例演示如何从零开始搭建环境并创建一个简单的 Struts 2 项目,包括配置 `struts.xml`、编写 Action 类及视图文件,并配置 web.xml。通过这些步骤,你将学会基本的开发流程,为进一步学习高级功能打下基础。
29 0
|
缓存 ARouter 安全
安卓APP改装框架 ARouter
一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
|
19天前
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
50 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP