我从Spring Boot(Java)转为Ruby on Rails,所以我总结了一下我喜欢Rails的方面
Spring Boot已经很不错了,但现在Ruby on Rails才是首选!
我开始学习编程是为了能将其应用于工作中,但现在我主要是以兴趣的形式开发Web服务。我听说个人开发和创业中主流语言是Ruby on Rails,本来就有兴趣学习。但是,既然我对Java还是初级水平,学习另一门语言成本太高,只要能将其作为Web服务实现,我觉得无论什么语言都可以。
因此,在Java框架中,我们选择了简单快速开发的新框架Spring Boot进行开发。我们完成了从开发到发布的全部过程,对于想做的事情也大致上达到了预期。虽然有些好奇Ruby On Rails,但同时,我们对Spring Boot也有一定的喜爱,并且觉得使用与众不同的框架也有些酷,所以我们计划继续使用它。
这是大约三周前的事情。
我想到了要开发一个Web服务,并且计划在短短2到3周内发布。然而,竟然卡在了Twitter登录验证这一步。当然,以前也遇到过一些问题,经过了一番研究,发现使用Spring Boot(结合Spring Social和Spring Security)实现Twitter认证的资料非常少,包括英文资料在内也非常稀少。无论尝试哪种方法,都没有成功。我在这里花了两天时间(大约8小时)。
老实说,我对处理的过程并没有完全理解。我本可以从零开始查阅官方文档,自己去实现的方法也是存在的。对于自己实现的独特功能,我觉得花更多的时间也没关系,但对于像Twitter认证这样的通用组件,老实说我更希望能够通过复制粘贴来实现。突然我在Ruby on Rails中进行了一番研究,发现有很多示例代码,并且实现也非常简单。
之后继续研究Rails,并希望能够个人迅速地实现Web服务。对于这个要求,我认为Ruby On Rails显然很合适。
虽然学习成本会有一些,但从几个月的时间跨度来看,换用Rails应该会提高效率,所以我决定暂停服务开发,并进行迁移。顺便一提,我还换了编辑器,从VScode换到Atom。
学习Ruby on Rails的经历
我花了大约两个星期(约40到50小时)学习。我在坐火车和午休的时候阅读了Dotinstall的Ruby教程和Ruby on Rails教程,回家后进行了实践。
我已经飞跃地阅读和实践了Ruby on Rails教程,并粗略地重复阅读了三周。接下来的计划是在制作服务的同时学习那些不懂的部分。
Spring Boot与Ruby on Rails的比较
Ruby on Rails是非常出色的框架!
提供的文档和样本数量非常庞大,且完全免费。
非常重要。特别是对于自学者来说,由于没有可以随意向其请教的人,谷歌老师的活跃变成了生死攸关的问题。
春季启动:
春季启动没有太多关于网络的信息,所以我去找了参考书,但选择只有大约四种,且书评很少,无法确定好坏。附近的书店也没有预订,所以我特地去新宿买了。
Ruby on Rails:一种流行的开发框架,用于构建网站和Web应用程序的快速、高效和可靠的工具。
这次学习我一分钱也没花。无论是Ruby on Rails教程还是其他初学者级别的课程,只要有网络学习服务和搜索,基本都能学到。这是一个非常易于入门的框架,样例也很丰富,可以期待加快今后的开发速度。
设置执行环境很方便。
春季引导
安装Java并设置环境变量,安装Maven并设置环境变量,直到一切都能开始使用花了大约一个小时。对于初学者来说,这几乎是令人沮丧到放弃的程度。
Ruby on Rails:一种用于构建Web应用程序的开发框架。
使用MAC做过这个,但是它太简单了以至于我都忘了它是怎么做的。
※我忘记了。
项目创建很容易。
春季启动器
访问 Spring Initializer 并创建一个包。
我仍然不确定在 Group 和 Artiface 项中应该填写什么,因为可供选择的项目很多。
Ruby on Rails:
据说可以通过控制台使用rails new快速开始开发。还可以通过选项指定数据库类型。
默认的文件夹结构非常出色。
Spring Boot: 春天的靴子
最初には、特に何もできず、自分でフォルダーの配置ルールを決めて作る必要があります。当初はベストプラクティスがわからず、「これでいいのかな〜」と気になりつつも、自分なりのMVCで何とかやっていました。

Ruby on Rails:
Ruby on Rails(RoR):
当使用Rails new来创建包时,会自动创建分为model、view、config等用途的文件夹。
这样一来,即使不必担心源代码的摆放位置,由于默认规定已整理好,对于初学者来说非常方便。
同时,自动创建还省去了例行的重复操作,这也是非常好的。

依赖包管理很简单
春季起动 :
这个我会用POM(Maven)进行管理。
条目的内容大概是这样。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Ruby on Rails:
使用 gem 文件进行管理。
项目说明项是相同的。可能会更简单一些。
gem 'rails', '~> 5.2.0'
URL映射易懂。
Spring Boot: 春季启动
在控制器中,我们进行URL和视图的映射以及值的传递。
由于映射跨越多个文件,很容易混淆哪个URL与哪个视图、控制器相关联。当value = “/”与mav.setViewName(“index”)配对时,会在名为index的模板(HTML文件)中查找并显示。另外还有很多其他定义方式。
@Controller
public class indexContoroller{
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView showIndex (ModelAndView mav){
mav.setViewName("index");
return mav;
}
}
Ruby on Rails:Ruby语言的开发框架。
URL映射应在routers.rb文件中定义。
Spring Boot的控制器将URL映射提取出来,使其易于阅读。例如,get ‘/help’,to: ‘static_pages#help’中的 ‘/help’ 是URL,’static_pages#help’ 是执行相关操作的类。
Rails.application.routes.draw do
get '/help', to: 'static_pages#help'
class StaticPagesController < ApplicationController
def help;
#hogehoge
end
ends
数据库的存在被抽象化得几乎被忘记了。
春节:
当要使用数据库时,需要准备好数据库并创建表,然后需要准备几个用于数据库连接的类。虽然操作被抽象化了,但要使数据能够写入,需要经过相当多的步骤。
我在下面提供了一个操作Member表的类的示例,虽然有点长。
Member.java与Member表对应,并接收数据。
在MemberRepository.java中,可以自定义查询。
实际的访问方式是,在所需的类中使用@Autowired MemberRepository repository; 创建存储库实例,并使用repository.findById(id); 进行访问。
如果不指定表的主键类型,JpaRepository<Member, Integer>会报错。
public interface MemberRepository extends JpaRepository<Member, Integer> {
public Member findByUsername(String username);
public boolean existsByUsername(String username);
}
与表格相对应的类:
Entity
@Table(name = "member")
public class Member implements UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
// private Long userid;
private int userid;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
private String displyname;
public Member() {
super();
}
public String getDisplyname() {
return displyname;
}
public int getUserid() {
return userid;
}
public void setDisplyname(String displyname) {
this.displyname = displyname;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
@Override
public String getPassword() {
return this.password;
}
@Override
public String getUsername() {
return this.username;
}
public String getMail() {
return this.displyname;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
Ruby on Rails:
当运行命令 rails generate model “表名” content:text 时,将自动生成所需的数据库表和相关操作类。
并且可以立即从数据库中读取和写入数据。
m = "テーブル名".new
m.find_by()`
到现在为止,我还没有直接连接到数据库。在Rails中,我似乎忘记了数据库的存在。
Gem很出色。
春季启动器。
我在Spring Boot中实现了图片上传功能,但是非常费劲。
我用HTML和JS编写了上传和验证,然后将接收到的文件路径存入数据库,并将文件保存在本地。
需要从头开始编写这个过程。
Ruby on Rails:一种流行的开发框架。
关于图像上传,有一个叫做CarrierWave的Gem可以实现,处理速度只需Spring Boot的三分之一。虽然Spring也有许多方便的功能,但在Web开发方面,Rails给人留下了更好的印象。
网络服务器套件
Spring Boot: 春季启动
实际上,由于Spring Boot捆绑了Tomcat,所以这是个平局。
由于默认的端口是80,在MAC本地无法启动,因此需要指定端口号来启动。
Ruby on Rails:
由于端口默认是3000,所以不需要做任何操作就可以了。
其他方面,Ruby on Rails 的优点是值得一提的。
-
- データ受け取った後のバリデーションが簡単
-
- テンプレートエンジンがシンプル(Eruby vs Thymelefe)
-
- HTMLのコンポーネント化が簡単
-
- JS,CSSの読み込みが楽(アセットパイプライン)
-
- フォームからデータ書き込みまでの流れが綺麗
-
- Ajax簡単。JSほぼ書かなくていい
-
- コントローラーからビューへの値の受け渡しを自動でやってくれる。
- コントローラーを作るとビューも自動的に作成される
概括
Rails提供了很多以简化繁琐工作为目的的后台功能,所以写代码的时候就感觉像是在玩拼图或者游戏。关于Spring Boot,它需要进行一些繁杂的步骤来实现功能,所以我觉得适合团队开发大型的应用程序,但在个人开发方面,这种严谨性并不是必需的。这是我目前的结论。