33
動手打造 Application Framework [email protected]

動手打造 application framework-twMVC#15

  • Upload
    twmvc

  • View
    213

  • Download
    0

Embed Size (px)

DESCRIPTION

講者:Kevin Jong(中K) 講者簡介: 2012 第五屆 iT邦幫忙鐵人賽 - 鐵人優選獎「技術組」「Kuick Application & ORM Framework」 2013 第六屆 iT邦幫忙鐵人賽 - 鐵人賽佳作「開發技術組」「Kuick Hands on Labs」 課程簡介:一個系統時常不會只有一個Web,更多時候是由N個Console與Web組合而成,要如何監控這N個App? 就從打造「可配置」、「可監測」、「可外掛」以及「可控制」的Application Framework開始。 課程時間:70 分鐘

Citation preview

Page 1: 動手打造 application framework-twMVC#15

動手打造 Application Framework

[email protected]

Page 2: 動手打造 application framework-twMVC#15

Framework 集成

2

Page 3: 動手打造 application framework-twMVC#15

http://mvc.tw

每個人心裡想的都不一樣。

或許沒有一個真正的範圍!

What is the Application Framework?

3

我以為

你以為 他以為

Page 4: 動手打造 application framework-twMVC#15

http://mvc.tw

What I would like to say is..

4

有誰了解全部內容?

講我覺得重要的

講白話一點

70 內分鐘講得清楚的

個人的想法,與大家分享

全部的內容

講述的內容

Page 5: 動手打造 application framework-twMVC#15

http://mvc.tw

Why do we need Application Framework?

5

複雜的企業邏輯,不會因

此變得簡單。

Application Framework 帶

來的是清晰,不是簡化。

簡化

清晰

Page 6: 動手打造 application framework-twMVC#15

http://mvc.tw

Library Framework

類別庫 集成

You call Library. Framework calls you.

Your project’s Tools. Your project’s Life.

一組包含在類別裡能被程式呼叫的方法,每次的呼叫將完成特定工作並回傳控制。

包含抽象設計與內建行為,程式需要透過子類別或是插入程式的方式,在執行期特定的時點呼叫你的程式。

Library vs. Framework

6

放下既有的技術定義,先用簡單的方法了解。

Page 7: 動手打造 application framework-twMVC#15

Lifecycle 系統生命周期

7

Page 8: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Running

8

執行中

專案程式執行在 Application Framework 建立的服務之上

Page 9: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Action

9

狀態

Running

動作

啟動 Start

停止 Stop

Page 10: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Circle

10

生命周期形成封閉的迴圈

Page 11: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Full Circle

11

完整的生命周期

Page 12: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : State

穩定狀態

Permanent State

已停止 Stopped

執行中 Running

已暫停 Suspended

過渡狀態

Transition State

啟動中 Starting

停止中 Stopping

恢復中 Resuming

暫停中 Suspending

12

生命周期就是,系統一連串狀態的改變與處理

Page 13: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Sequence

13

由封閉的迴圈,改從循序的角度了解系統狀態的變化

Page 14: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Start

14

內建 Builtin

外掛 Plugin

Page 15: 動手打造 application framework-twMVC#15

http://mvc.tw

Lifecycle : Stop

15

反序停止 Plugin, Builtin

Page 16: 動手打造 application framework-twMVC#15

Builtin & Plugin

16

Page 17: 動手打造 application framework-twMVC#15

http://mvc.tw

已知的被動服務

Framework 提供每一個內建服務介面,定義服務內容

專案程式主動使用內建功能

常以靜態類別與方法提供,例如:Auditor.Success(..)

實作組件是否載入,不影響專案運作

Builtin 內建

17

Page 18: 動手打造 application framework-twMVC#15

http://mvc.tw

未知的主動服務

Framework 提供外掛統一介面,定義管控方式

專案程式被動享受外掛服務

另開執行緒,或執行於獨有的 AppDomain 裡

實作組件是否載入,不影響專案運作

Plugin 外掛

18

Page 19: 動手打造 application framework-twMVC#15

http://mvc.tw

Builtin Plugin

已知的 未知的

被動的 主動的

介面定義服務內容 介面定義管控方式

不同介面 共同介面

以靜態類別與方法提供 執行緒或獨有的 AppDomain

例如:Audit稽核 例如:AD帳號同步程式

Builtin vs. Plugin

19

Page 20: 動手打造 application framework-twMVC#15

Kuicker

20

Page 21: 動手打造 application framework-twMVC#15

http://mvc.tw

Kuicker : Execution Order

Hosting & Kernel

讀取定義檔 Configurable

收集組件 Assembly

解析類別 Reflection

附加生命周期處理 Event

載入內建服務 Log, Audit

載入外掛服務 Pluginable

21

Page 22: 動手打造 application framework-twMVC#15

http://mvc.tw

Kuicker : Hosting & Kernel

22

Page 23: 動手打造 application framework-twMVC#15

http://mvc.tw

1. ConfigurationSectionHandler (deprecated)

System.Configuration.IConfigurationSectionHandler

2. ConfigurationSection

System.Configuration.ConfigurationSection

Kuicker : Configurable

23

Page 24: 動手打造 application framework-twMVC#15

http://mvc.tw

AppDomain Assemblies

APP_CODE Assemblies

Folder

bin >> AppDomain Assemblies

{special folder} >>

Kuicker : Assembly

24

Page 25: 動手打造 application framework-twMVC#15

http://mvc.tw

如果外掛組件放在 bin 裡,調整 bin 的組件將會觸發系

統重啟,這是否就失去外掛的意義?

如果外掛組件放在特定目錄裡,讀取特定目錄裡的組件會有

額外授權需求,這不利於一般化的部署。

我們真的需要具有熱插拔的系統嗎?

Kuicker : 熱插拔的系統

25

Page 26: 動手打造 application framework-twMVC#15

http://mvc.tw

制定 Builtin 服務內容與 Plugin 管控方式並定義介面

Kernel 主動收集組件裡的實作特定介面的類別

內建外掛執行順序採 FIFO,生命周期附加程序以核心優先

外掛錯誤處理,以不影響主程式為原則

類別提供 Self-Description 自我描述

Kuicker : Reflection

26

Page 27: 動手打造 application framework-twMVC#15

http://mvc.tw

Kuicker : Event

核心事件

BuiltinStart, PluginStart

PluginStop, BuiltinStop

非核心事件

BeforeStart, AfterStop

BeforeBuiltinStart,

AfterBuiltinStart

BeforePluginStart,

AfterPluginStart

BeforeStop, AfterStop

實作方式

Event Handler

Type or Instance

Level?

Attach / Detach or

Implemented Interface?

27

Page 28: 動手打造 application framework-twMVC#15

http://mvc.tw

Kuicker : Log

Apache logging services

log4j

log4net

log4php

log4cxx

Chainsaw

log4j Family

log4plsql

log4js

log4c

log4javascript

log4perl

28

Log 機制的發展,逐漸向 log4j 收斂 (個人認為)

Page 29: 動手打造 application framework-twMVC#15

http://mvc.tw

Send Message, Error Control, Application Domain

Proxy, Gateway, Queue, Remoting, Socket

Priority, Sleep

Interrupt, Dependency

Out-of-Process / In-Process

Worker / Job, Load / Unload

Synchronous / Asynchronous

Kuicker : Pluginable

29

Page 30: 動手打造 application framework-twMVC#15

30

Kuick >> Kuicker

Page 31: 動手打造 application framework-twMVC#15

http://mvc.tw

好活動需要支持

感謝 KKTIX 贊助 twMVC 活動報名平台

31

Page 32: 動手打造 application framework-twMVC#15

http://mvc.tw

好課程需要支持

32

http://skilltree.my

Page 33: 動手打造 application framework-twMVC#15

謝謝各位

• 本投影片所包含的商標與文字皆屬原著作者所有。• 本投影片使用的圖片皆從網路搜尋。• 本著作係採用姓名標示-非商業性-相同方式分享 3.0 台灣授權。閱讀本授權條款,請到

http://creativecommons.org/licenses/by-nc-sa/3.0/tw/,或寫信至Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

h t t p : / / m v c . t w