動手打造 Application Framework kevin@kuicker.org
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
http://mvc.tw 好課程需要支持 32 http://skilltree.my
謝謝各位 • 本投影片所包含的商標與文字皆屬原著作者所有。 • 本投影片使用的圖片皆從網路搜尋。 • 本著作係採用姓名標示-非商業性-相同方式分享 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

動手打造 application framework-twMVC#15