超敏捷 Java 開發框架 ServcieFramework

發表于:2012-09-13來源:Csdn作者:blogdevteam點擊數: 標簽:ServcieFrame
ServcieFramework是一個敏捷、快速、富領域模型的Java MVC 框架,其設計理念是讓用戶真正能夠用最簡單的方式解決80%的問題。 該項目目前應用于作者公司內部的一個產品中,剛開源不久,便引起了開發者的廣泛關注與討論。為了使大家進一步了解該框架,

  ServcieFramework是一個敏捷、快速、富領域模型的Java MVC 框架,其設計理念是讓用戶真正能夠用最簡單的方式解決80%的問題。

  該項目目前應用于作者公司內部的一個產品中,剛開源不久,便引起了開發者的廣泛關注與討論。為了使大家進一步了解該框架,我們專訪了作者祝海林。

  歡迎大家推薦更多開源項目給我們,支持中國的開源項目發展,如果您和您的團隊希望展示創業理念和有趣之處,或者有朋友正在創造這樣的價值,請聯系我們,發信到blog@csdn.com即可。

  先來個自我介紹吧!

  網名 WilliamZhu,微博@PrinceCharmingJ。Java程序員,4年開發經驗,2010年懵懂來京。有過短暫幾天Rails程序員生涯,頗為自豪。曾經為了創建一個音樂新模式的嘗試而奮斗過,至今仍念念不忘?,F專注于搜索和數據挖掘領域。平常的愛好就是向大牛們提問、聆聽、學習。

  ServcieFramework 是什么?

  ServcieFramework,一個敏捷、快速、其ORM 和 Controller等設計會 surprize 你的一個 Java MVC 框架,專為移動應用后端量身定做,適用于快速搭建一個后端服務(說的好像有點拗口,oh yeah~~~)

  ServcieFramework 三大亮點:

  ORM 實現真正的充血模型,非常 ActiveRecord 化。

  非常輕量,你完全看不到servlet api,因為壓根就沒有使用Servlet規范。應用本身是一個普通的Java程序,http監聽只是其中的一個模塊。

  便于測試。模型類和controller都可以當作普通的類來進行測試。

  發起這個項目的初衷是什么?

  項目的起源是我們要用Java寫一個后臺服務,提供Web API,但覺的Spring太重,后來我們用nutz開發,但仍然覺得nutz有很多限制,比如,我們對response status比較重視??蛻舳藭鶕煌瑺顟B碼進行不同處理,nutz就顯得支持有點弱了。最后我跟老板說,給我機會,我可以寫個更輕量,更 RESTFul的。于是便在老板的支持下有了ServcieFramework。目前該項目應用在我們的搜索產品中。

  開發效率比肩Rails,如何體現?是如何實現的?

  你可以 clone ServiceFramework一份下來試試。當然從文檔也是能夠直觀看到的。待會我會舉幾個小例子。

  另外之前我也發過一篇關于ServiceFramewok的資訊,不愿意看文檔的同學也可以看看這篇簡短的資訊。

  為了充分說明開發的便捷性,我直接在這篇采訪稿中做個例子。

  建立一張表:

  [sql] view plaincopy--標簽表

  CREATE TABLE `tag` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) DEFAULT NULL,

  `tag_synonym_id` int(11) DEFAULT NULL,

  `weight` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  --標簽組。一個標簽可以屬于多個標簽組。一個標簽組包含多個標簽

  CREATE TABLE `tag_group` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(32) DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `id` (`id`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  定義兩個類:

  [java] view plaincopypublic class Tag extends Model {

  @Validate

  private final static Map $name = map(

  presence, map("message", "{}字段不能為空"),

  uniqueness, map("message", "{}字段不能重復")

  );

  @ManyToMany

  private List tag_groups = list();

  }

  public class TagGroup extends Model {

  @ManyToMany

  private List tags = list();

  }

  Ok了,模型類建立完畢。 寫一個controller:

  [java] view plaincopypublic class TagController extends ApplicationController {

  @BeforeFilter

  private final static Map $check_params = map(only, list("save"));

  @At(path = "/blog", types = POST)

  public void save() {

  if(!Tag.save(params())){

  render(HTTP_400,tag.validateResults);

  }

  render(ok());

  }

  private void check_params(){

  if(isEmpty(param("tag")))render(HTTP_400,"您至少需要傳遞一個name字段");

  }

  }

  一個簡單的例子就做完了。查詢方面提供了Arel的查詢形式。比如:

  [java] view plaincopyList orders = Order.where("status=:status",map("status",Order.Status.NEW)).joins("details").fetch();

  ServiceFramewok實現重點有三個方面:

  簡化ORM框架。在我看來,Rails 的ActiveRecord是ORM的最佳實踐。ServiceFramework的ORM基本是照著它改的。

  重新設計Controller中的 filter(interceptor)。各種before filter、around filter 可以有效簡化邏輯應用。而框架本身則努力簡化filter的使用。

  規范化項目目錄。目前大部分新的框架都是這么做到的。一開始就給你生成一個標準的項目目錄結構。ServiceFramework則進一步簡化了這個操作。

  順帶提一下目前類似Rails的Java框架可能會用到的一些技術:

  字節碼增強。比如javassist、cglib等。代表有PlayFramework。

  AOP 通過對注解等的解析,生成相應的切面文件。不過這需要特定的編譯器。代表有 Spring ROO。

  還有就是通過IDE生成根據模板生成一些文件。這個可操作性不強。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97