邁向架構師的暖身運動(7):愈了解基礎知識,愈具有架構設計的能力
古人說:勿在浮砂築高塔
這句話就是在說,不要在基礎不穩的情況下就想蓋大樓,換到軟體架構這裡就是指:不要在基礎不夠的情況下就想設計架構,因為很容易就掛一漏萬,而且考量範圍也不夠周全,這樣很容易讓架構崩潰,或是做出一個昂貴的玩具罷了(試想公司投入大筆成本研發架構出來,如果不能用的話那不就是做出一個昂貴的玩具嗎)。
舉個例子來說,如果要想用 .NET Framework 設計一個 Data Access Framework,你要熟悉:
- ADO.NET (不是指 Data Service 或 Entity Framework,而是現在很多人根本不想碰的 SqlClient, OleDb, Odbc,以及 DataSet, DataTable, DataRow, DataColumn 那一塊)。
- SQL
- 資料庫與資料庫管理系統的基礎概念。
- 交易處理,尤其是 Isolation Level 和鎖定的概念。
- Security Considerations (例如 SQL Injection, Parameterized Statements)。
- 物件導向技術 (Provider, Command, Factory, …)。
- Configuration Management (App.config, Web.config)
- Attribute 與 Metadata 技術。
- Reflection 技術。
只要漏了一個,那設計出來的 Framework 就很有可能缺這缺那的,簡單的來說,想要把方法 (method) 自動轉換成 SQL 指令送到資料庫執行的話,你必須要用 StackFrame 和 Reflection,可能還要依 Dynamic SQL 和 Stored Procedure 來區分,那這個時候就又要用到 System.Attribute,若你對這些東西不了解,要如何設計呢?
再舉個例子,如果想要用 .NET Framework 設計一套 CMS (Content Management System),那你要熟悉的更多了:
- 物件導向技術。
- 組態管理。
- HTTP Handler 與 HTTP Module
- AJAX
- ASP.NET 核心功能 (Core Service)
- 資料庫與 SQL。
- JavaScript Framework (ASP.NET AJAX or jQuery)
- XML 與 XSLT
- Reflection
- Attribute 與 Metadata
- HTTP 狀態碼管理
- ASP.NET MVC (若有用的話)
- Web Security Considerations
- URL Rewriting
- …
只要缺了一項,設計起來就會有點彆手,總是會少了點什麼。
對基礎知識的了解愈多,愈能夠針對需求的特性實作出具彈性的解決方案,就算是使用 ASP.NET Web Form 還是 ASP.NET MVC 等不同的 Application Framework,也可以針對特別的應用來發展出具水準的解決方案,或是乾脆自己做 Framework。反過來說,如果了解不深,就很有可能會陷入不同技術問題的泥淖,而且提出的方案可能也會不夠穩定,無法滿足需求,彈性不足或限制太多等等問題。這對一個 Framework 甚至軟體架構是很傷的。
所以,不論你是否要當個架構師,或是只是想要設計軟體或 application,多充實基礎知識是好的,因為你會看到人家看不到的東西,也更能夠針對需求設計出更強大更具彈性的解決方案。
PS: 本文只舉 Framework 的例子而已,真正大型的軟體架構要了解的比 Framework 要多太多了,像 Domain Knowledge (領域知識,像會計,統計,製造,財務,KPI 或平衡計分卡等), Business Process (商業流程), Law (法規), Rule (規範) 等都算,所以大型軟體架構通常都是一個 Team 來設計,才不會出現這邊少一個那邊缺一個的問題。