Tiny快速入門之控制層開發


下面是一些經常使用的連接,供你們使用: java

GIT地址(必須是OSC家的):https://git.oschina.net/tinyframework/tiny
問題報告:https://git.oschina.net/tinyframework/tiny/issues
git

官方網站:http://www.tinygroup.org 程序員

更多內容,請看本人博客。不同的內容,同樣的精彩! web

前面講了Tiny快速入門之服務開發Tiny快速入門之Web界面快速開發實踐,也就是說開發服務和界面都沒有問題了,很明顯要作一個完整的系統仍是不夠的,所以確定有控制層,才能夠把整個過程打通。 app

控制層充當着界面和服務之間協做的角色。控制器從界面層接收用戶輸入的信息,而後調用服務來執行特定的處理,並把最終的結果回傳給界面層進行渲染。 框架

Tiny框架中控制層的寫法能夠有許多種: 網站

  • 集成Struts或其它方案來完成
  • 按Tiny框架的要求代碼來完成
  • 經過Tiny頁面流來完成

集成Struts等方案,這裏再也不敘述,僅介紹經過Tiny框架來實現的方式: this

1、經過代碼編寫控制層邏輯

1.代碼示例


@Controller()
public class HelloAction implements WebContextAware{

	private WebContext webContext;
	
	public void setContext(WebContext webContext) {
		this.webContext = webContext;
	}
	
	@RequestMapping(value={"/helloByMvc.do"})
	@View(value="/helloworld/helloresult.page")
	public void sayHelloMethod(String name) {
		if (name == null) {
			name = "world";
		}
		webContext.put("result", String.format("Hello, %s", name));
	}

}

解釋 spa

@Controller()表示這個類是個控制層的類。
implements  WebContextAware表示,這個要類要注入Web 上下文對象。
@RequestMapping(value={"/helloByMvc.do"})表示響應/helloByMvc.do請求,注意,這個能夠有多個值。

@View(value="/helloworld/helloresult.page")表示執行完畢以後轉到/helloworld/helloresult.page頁面進行渲染。
WebContext,也就是Web上下文,是Tiny Web框架中的一個重要類,用於在上面放置各類數據。
你能夠把它理解成像Map同樣的東西,能夠不斷的往裏面塞東西,塞進去的,在展示層就是可見的。
.net

固然,對於上面這麼簡單的類子,其實不用實現WebContextAware接口,這個時候的寫法以下:

@Controller()
public class HelloAction {
       @ResultKey(value = "result")
 @RequestMapping(value={"/helloByMvc.do"})
 @View(value="/helloworld/helloresult.page")
 public String sayHelloMethod(String name) {
 if (name == null) {
 name = "world";
 }
 return String.format("Hello, %s", name);
 }
}
相對來講,比上面一種寫法更簡單,可是惟一的限制就是隻能傳回一個對象了。 

@ResultKey(value= "users")
@RequestMapping(value={"/crud/service/tinydb/list.page"})
public List<Bean> queryUsers(@ServiceParameter(name = "TUser") Bean TUser)throws Exception  {
	Bean[] beans = operator.getBeans(TUser);
	if (beans != null) {
		return Arrays.asList(beans);
	}
	return null;
}
固然,入參也不必定必須是簡單類型,對象也是容許的。

2.小結

經過註解方式,能夠方便的在普通的Java類中定義控制層的處理邏輯,步驟:

  • 在類上增長@Controller註解
  • 在方法上增長@RequestMapping註解
  • 若是有返回值,能夠經過注入WebContext對象來返回,也能夠經過@ResultKey註解完成,可是@ResultKey只能把方法的返回值用指定Key放入上下文。

問題:若是控制層處理方法須要的是一個對象,若是辦呢?

  • 若是符合Tiny框架之命名規範,因此有的一切由框架幫你自動搞定
  • 若是不符合Tiny框架之命名規範,請注入WebContext對象,本身進行組裝

2、經過頁面流編寫控制層

1.控制層完成全部功能

固然,HelloWorld的功能太簡單了,它甚至能夠直接在控制層就完成了。

雖然這麼作從計算機邏輯上來講是沒有問題的,也會給出正確的結果,可是實際應用當中,這麼作就是有問題的,由於業務邏輯是不該該在控制層完成的。

因此,上面的作法是錯誤的,也是不推薦的。

2.業務流和頁面流分離

因此正確的是編寫一個業務流:


上面編寫了流程處理,而後就能夠編寫寫頁面流了:

固然,它也不必定都是一條線的,也能夠是複雜的,好比:

頁面流這裏只要調用一個服務就能夠,因爲調用完服務,服務的結果會自動放在上下文當中,所以默認是不須要進行任何附加處理的。

3.小結 

經過頁面流的方式,有很是清晰的頁面處理邏輯展現,更容易理解業務的處理過程。因爲不用寫程序,沒必要擔憂程序員在裏面添加一些危險代碼(在某些特殊行業這個是要嚴格防止的),流程即文檔,能夠快速生成文檔。 

Tiny框架中已經原生有了許多頁面流組件,固然也支持激情四射的你自定義添加組件,這個會涉及到流程組件開發方面的問題,不在這一節當中詳細說明了。

4.文檔生成

第一步:選擇嚮導


第二步選擇要生成的文檔

而後,就是看生成的文檔了

技術經理徹底能夠經過看文檔就知道程序的執行結果及程序員完成的狀況。

好像有點走題哦,下次再重點介紹流程編排相關的事情。

總結

Tiny框架的控制層,提供了對象自動組裝、數據校驗、代碼方式編寫控制層、流程編排方式編寫控制層等靈活多樣的編寫方式。真正把程序員從繁雜的工做當中解脫出來,只作本身須要作的事情。

至此,Tiny快速入門的主要四節內容已經講了三節,回顧一下就是:

Tiny快速入門之服務開發

Tiny快速入門之Web界面快速開發實踐

Tiny快速入門之控制層開發 

明天將編寫Tiny快速入門之流程開發,敬請期待

相關文章
相關標籤/搜索