熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java 與Ruby on Rails對接

2022-06-13   來源: JSP教程 
Ruby 和rail回歸框架

  Ruby和 rail是非常簡潔的很容易很豐富我無法避免的連續看到以及聽到以上這樣的說法比如說Bill Walton 寫的Rail回顧上關於Ruby的文章提到如果我告訴你當你使用Rail開發一個Web應用程序可以比你使用一種特定的Java框架開發要快至少十倍的時候你會怎麼想?

  在嘗試了RnR之後我發現這就是一個伴隨舊技術的非常經典的框架

  · Ruby是一種非常有力量的語言就像Smalltalk我選擇靜態語言

  · 搭建的材料是被動代碼生成就像是IDE wizards或者AppFuse我選擇動態代碼生成或者是更好的——根本就不需要代碼生成

  · 關系數據庫中心編碼發生器和ActiveRecord在表中會被首先想到然後是在類別中被想到我選擇一種僅僅面向對象的就像是HibernateJPA 甚至是ODBMS

  · MVC我正在尋找比舊式MVC框架更新很好的工具

  Java的問題Java開發者

  在Java的世界中生產力是文化問題而不是技術問題這就是所謂的這不是Java的錯而是我們的錯我們作為Java開發者需要設計出非常漂亮的體系以適用於任何地方的GoF模式使得任何工具都是可再度使用的把三層架構放到我們所有的系統中以及使用web服務器我們不是在尋找最直接的方法所以我們就沒辦法發現最直接的方法但是Java是一種非常簡單的語言使得我們很輕易就可以接近軟件開發

  Java生產力其它的方法

  解決生產力的一個方法是使用驅動模型這就是模型環節的開發僅僅是我們應用程序中的模型環節就可以使用框架來生產所有的應用程序MDA OpenXava Trails NakedObjects Roma框架和JMatter都是采用的這種方式

  目標

  這是所需要應用程序的主要界面

  Java 與Ruby on Rails對接

  圖一

  基本上應用程序推測需要做三件事情

  · 列出所有准則的清單

  · 創造新准則和編輯現有的准則

  · 為某個類別指定合適的准則

  Ruby on Rails第一次沖刺

  使用RnR的第一步是創建一個新的項目在命令行你需要輸入

  $ rails cookbook

  現在你必須創建以及配置你的數據庫

  現在是時間輸入你的第一行代碼了在這個例子中使用SQL代碼

         drop table if exists recipes;

  drop table if exists categories;

  create table categories (

  id int not null auto_increment

  name varchar() not null default

  primary  key(id)

  ) engine=InnoDB;

  create table recipes (

  id int not null auto_increment

  category_id int not null

  title varchar() not null default

  description varchar() null

  date date null

  instructions text null

  constraint fk_recipes_categories foreign key

  (category_id) references categories(id)

  primary key(id)

  ) engine=InnoDB;

  顯然你需要在數據庫上面執行這些語句

  

  最後的步驟是生成Ruby代碼你只需要執行OS框架的下一個命令

  $ ruby script\generate scaffold recipe recipe

  $ ruby script\generate scaffold category category

  現在你已經擁有RnR應用程序的第一個版本並且准備運行

  很少量的工作一個簡單的創建表格然後執行向導讓我們看看結果

  Rails結果

  這是應用程序的結果

  Java 與Ruby on Rails對接

  圖二

  Java 與Ruby on Rails對接

  圖三

  Java 與Ruby on Rails對接

  圖四

  

  少量的工作少量的結果

  JPA on OX的第一次沖刺

  繼續使用OpenXava使用OpenXava的第一步是創建新的項目

  $ ant CreateNewProjectxml Dproject=CookBook

  現在你必須創建以及配置你的數據庫

  現在是時間輸入你的第一步代碼了在這個例子中使用Java代碼

         Recipejava:

  package okbookmodel;

  import javautil*;

  import javaxpersistence*;

  import orgopenxavaannotations*;

  @Entity

  @View(members=title; description; date; instructions)

  public class Recipe {

  @Id @GeneratedValue @Hidden

  private Integer id;

  @Required @Column(length=)

  private String title;

  @Column(length=)

  private String description;

  private Date date;

  @Stereotype(HTML_TEXT)

  private String instructions;

  public Integer getId() {

  return id;

  }

  public void setId(Integer id) {

  thisid = id;

  }

  public String getTitle() {

  return title;

  }

  public void setTitle(String title) {

  thistitle = title;

  }

  public String getDescription() {

  return description;

  }

  public void setDescription(String description) {

  thisdescription = description;

  }

  public Date getDate() {

  return date;

  }

  public void setDate(Date date) {

  thisdate = date;

  }

  public String getInstructions() {

  return instructions;

  }

  public void setInstructions(String instructions) {

  thisinstructions = instructions;

  }

  }

  Categoryjava:

  package okbookmodel;

  import javautil*;

  import javaxpersistence*;

  import orgopenxavaannotations*;

  @Entity

  public class Category {

  @Id @GeneratedValue @Hidden

  private Integer id;

  @Required @Column(length=)

  private String name;

  public Integer getId() {

  return id;

  }

  public void setId(Integer id) {

  thisid = id;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  thisname = name;

  }

  }

  

  最後一個步驟是生成數據庫圖表你只需要執行項目中的一個小目標

  $ ant updateSchema

  現在你已經擁有OpenXava應用程序的第一個版本並且准備運行

  少量的工作簡單的POJO以及執行更新圖表讓我們看看結果

  OpenXava結果

  這是應用程序的結果

  Java 與Ruby on Rails對接

  圖五

  Java 與Ruby on Rails對接

  圖六

  

  注意用戶可以創建更新刪除從列表生成PDF將列表輸入到excel每一列的命令大型結果和過濾數據的支持分頁而且你可以直接部署不需要代碼僅僅是執行一個小目標JSR入口上的應用程序以及OpenXava的look & feel能夠適用於入口的look & feel這就是一個應用程序准備產出的第一步

  少量的工作完美的結果

  觀察這裡RnR 與 OX之間的差別一個冷靜的觀點是在RnR中你先輸入表而在OpenXava中先輸入類別

  控制器

  Rails引起basic CRUD的控制邏輯你在下面可以看到

  Java 與Ruby on Rails對接

  圖七

  另一方面OX不會為CRUD生成任何代碼OpenXava僅有一個屬性代碼可以執行CRUD和打印將自動化配置給所有的實體你可以書寫你自己的屬性CRUD邏輯或者你可以為一個特有的實體書寫詳細邏輯但是你不會為每一個實體設置控制代碼使用這種方法你需要維護少量的代碼並且你可以改變CRUD獨立單元的邏輯

  Rails使用合成碼OX使用屬性代碼

  你可以在OpenXava wiki上面學到更多的OX控制器知識

  增加關聯

  為了規范在Ruby中從類別增加關聯你需要在categoryrb中書寫如下代碼

  Java 與Ruby on Rails對接

  圖八

  

  以及在reciperb中

  Java 與Ruby on Rails對接

  圖九

  相當簡單但是你要做更多的工作你必須編譯

  cookbook\app\views\recipe\_formrhtml

  增加如下代碼

         <p><labelfor=recipe_category_id>Category</label><br/>

  <%= select(recipe category_id Categoryfind(:llect{|c| [cname cid] }) %></p>:

  結果是

  Java 與Ruby on Rails對接

  圖十

  在這個環節OpenXava中你不得不在Categoryjava中使用JPA規定關聯

        @ManyToOne(optional=false) @DescriptionsList

  private Category category;

  and in Recipejava:

  @OneToMany(mappedBy=category)

  private Collection recipes;

  而且你不需要接觸任何類似HTML代碼應用程序將會顯示如下

  Java 與Ruby on Rails對接

  圖十一

  你有一個為修改產生的鏈接或者從這裡創建新類別

  不增加任何輔助編碼如果使用者使用類別單元他將獲得每一個類別中准則的收集如下所示

  Java 與Ruby on Rails對接

  圖十二

  在這裡RnR應用程序還是不具備這種特性你需要書寫一些Ruby 和HTML代碼來實現一樣的結果

  在這一塊RnR 和 OX的主要差別是在OX中你不需要書寫任何HTML類似的代碼事實上你連用戶界面代碼都根本不需要書寫

  精確的基礎資料

  Ruby on Rails指導的下一個步驟是為一種特性生成基礎資料在RnR中你不得不編譯控制編碼從而達到這個目的讓我們開看看

  修改以及更新的方法是增加如下代碼行

         @recipedate = Timenow

  The equivalent in OX is adding the @DefaultValueCalculator annotation in model:

  @DefaultValueCalculator(CurrentDateCalculatorclass)

  private Date date;

  用一種更為公開的方法獲得一樣的結果

  在這裡盡管RnR中在控制器上放置的代碼OX中統計基礎資料的代碼為了確認以及業務邏輯一般來說是放在模型上OX促進從控制器轉移業務邏輯到模型上

  RnR的相關文章中提到我改良模型文件所以我需要重新啟動我們的web服務器盡管使用Eclipse WTP 我只需要按一下Ctrl 加上B在浏覽器上點擊刷新以便於看見OpenXava應用程序上面模型的變化

  結論

  Ruby on Rails 和 OpenXava之間最主要的差別是RnR是 MVC框架你不得不書寫模型和控制器OX是模型驅動框架你只需要書寫模型結果就是更少的代碼更好的程序

  另一個大的不同點是RnR使用被動代碼生成方式;這就是說生成代碼但是這之後如果你想要擴展或者提煉代碼你不得不編譯合成碼OpenXava不需要使用代碼生成器你所擁有的代碼都是你所書寫的你可以在Java的世界中找到提高生產力的方法


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19267.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.