Download - 動手打造 application framework-twMVC#15
動手打造 Application Framework
Framework 集成
2
http://mvc.tw
每個人心裡想的都不一樣。
或許沒有一個真正的範圍!
What is the Application Framework?
3
我以為
你以為 他以為
http://mvc.tw
What I would like to say is..
4
有誰了解全部內容?
講我覺得重要的
講白話一點
70 內分鐘講得清楚的
個人的想法,與大家分享
全部的內容
講述的內容
http://mvc.tw
Why do we need Application Framework?
5
複雜的企業邏輯,不會因
此變得簡單。
Application Framework 帶
來的是清晰,不是簡化。
簡化
清晰
http://mvc.tw
Library Framework
類別庫 集成
You call Library. Framework calls you.
Your project’s Tools. Your project’s Life.
一組包含在類別裡能被程式呼叫的方法,每次的呼叫將完成特定工作並回傳控制。
包含抽象設計與內建行為,程式需要透過子類別或是插入程式的方式,在執行期特定的時點呼叫你的程式。
Library vs. Framework
6
放下既有的技術定義,先用簡單的方法了解。
Lifecycle 系統生命周期
7
http://mvc.tw
Lifecycle : Running
8
執行中
專案程式執行在 Application Framework 建立的服務之上
http://mvc.tw
Lifecycle : Action
9
狀態
Running
動作
啟動 Start
停止 Stop
http://mvc.tw
Lifecycle : Circle
10
生命周期形成封閉的迴圈
http://mvc.tw
Lifecycle : Full Circle
11
完整的生命周期
http://mvc.tw
Lifecycle : State
穩定狀態
Permanent State
已停止 Stopped
執行中 Running
已暫停 Suspended
過渡狀態
Transition State
啟動中 Starting
停止中 Stopping
恢復中 Resuming
暫停中 Suspending
12
生命周期就是,系統一連串狀態的改變與處理
http://mvc.tw
Lifecycle : Sequence
13
由封閉的迴圈,改從循序的角度了解系統狀態的變化
http://mvc.tw
Lifecycle : Start
14
內建 Builtin
外掛 Plugin
http://mvc.tw
Lifecycle : Stop
15
反序停止 Plugin, Builtin
Builtin & Plugin
16
http://mvc.tw
已知的被動服務
Framework 提供每一個內建服務介面,定義服務內容
專案程式主動使用內建功能
常以靜態類別與方法提供,例如:Auditor.Success(..)
實作組件是否載入,不影響專案運作
Builtin 內建
17
http://mvc.tw
未知的主動服務
Framework 提供外掛統一介面,定義管控方式
專案程式被動享受外掛服務
另開執行緒,或執行於獨有的 AppDomain 裡
實作組件是否載入,不影響專案運作
Plugin 外掛
18
http://mvc.tw
Builtin Plugin
已知的 未知的
被動的 主動的
介面定義服務內容 介面定義管控方式
不同介面 共同介面
以靜態類別與方法提供 執行緒或獨有的 AppDomain
例如:Audit稽核 例如:AD帳號同步程式
Builtin vs. Plugin
19
Kuicker
20
http://mvc.tw
Kuicker : Execution Order
Hosting & Kernel
讀取定義檔 Configurable
收集組件 Assembly
解析類別 Reflection
附加生命周期處理 Event
載入內建服務 Log, Audit
載入外掛服務 Pluginable
21
http://mvc.tw
Kuicker : Hosting & Kernel
22
http://mvc.tw
1. ConfigurationSectionHandler (deprecated)
System.Configuration.IConfigurationSectionHandler
2. ConfigurationSection
System.Configuration.ConfigurationSection
Kuicker : Configurable
23
http://mvc.tw
AppDomain Assemblies
APP_CODE Assemblies
Folder
bin >> AppDomain Assemblies
{special folder} >>
Kuicker : Assembly
24
http://mvc.tw
如果外掛組件放在 bin 裡,調整 bin 的組件將會觸發系
統重啟,這是否就失去外掛的意義?
如果外掛組件放在特定目錄裡,讀取特定目錄裡的組件會有
額外授權需求,這不利於一般化的部署。
我們真的需要具有熱插拔的系統嗎?
Kuicker : 熱插拔的系統
25
http://mvc.tw
制定 Builtin 服務內容與 Plugin 管控方式並定義介面
Kernel 主動收集組件裡的實作特定介面的類別
內建外掛執行順序採 FIFO,生命周期附加程序以核心優先
外掛錯誤處理,以不影響主程式為原則
類別提供 Self-Description 自我描述
Kuicker : Reflection
26
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
http://mvc.tw
Kuicker : Log
Apache logging services
log4j
log4net
log4php
log4cxx
Chainsaw
log4j Family
log4plsql
log4js
log4c
log4javascript
log4perl
28
Log 機制的發展,逐漸向 log4j 收斂 (個人認為)
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
30
Kuick >> Kuicker
http://mvc.tw
好活動需要支持
感謝 KKTIX 贊助 twMVC 活動報名平台
31
謝謝各位
• 本投影片所包含的商標與文字皆屬原著作者所有。• 本投影片使用的圖片皆從網路搜尋。• 本著作係採用姓名標示-非商業性-相同方式分享 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