我从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で何とかやっていました。

スクリーンショット 2018-06-10 19.09.13.png

Ruby on Rails:

Ruby on Rails(RoR):

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

スクリーンショット 2018-06-10 19.07.00.png

依赖包管理很简单

春季起动 :

这个我会用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,它需要进行一些繁杂的步骤来实现功能,所以我觉得适合团队开发大型的应用程序,但在个人开发方面,这种严谨性并不是必需的。这是我目前的结论。

广告
将在 10 秒后关闭
bannerAds