[書訊] .NET 相依性注入 (2014-12-08 更新)

電子書開始動工已經出版....


書  名:.NET 相依性注入
頁  數:235
技術等級:中階至進階
語  言:繁體中文
格  式:PDF/EPUB/MOBI
出版日期:2014 年 12 月 8 日
ISBN:9789574320684



簡介

本書內容是關於 .NET 相依性注入(Dependency Injection,簡稱 DI)程式設計的相關議題。透過本書,您將會了解:
  • 什麼是 DI、它有什麼優點、何時使用 DI、以及可能碰到的陷阱。
  • 如何運用 DI 應付容易變動的軟體需求,設計出更彈性、更好維護的程式碼。
  • 與 DI 有關的設計模式。
  • DI 於 .NET 應用程式中的實務應用(如 ASP.NET MVC、ASP.NET WEB API、WCF 等等)。[註:本書的縮減版不包含此項,稍後有詳細說明]
  • 如何在應用程式中使用現成的 DI 框架來協助實現 DI。本書支援的 DI 框架主要是 Unity,部分章節有提供 Autofac 的範例(如第 5 章、第 6 章)。

本書的範例皆以 C# 撰寫,讀者無須具備任何 DI 背景知識。

本書目錄

序
    關於本書
    誰適合閱讀本書
    如何閱讀本書
    書寫慣例
    需要準備的工具
    更新與支援
        下載範例程式與補充資料
    致謝
Part I:基礎篇
    第 1 章:導論
        為什麼需要 DI?
            可維護性
            寬鬆耦合
            可測試性
            平行開發
        什麼是 DI?
            入門範例—非 DI 版本
            入門範例—DI 版本
        何時該用 DI?
    第 2 章:DI 用法與模式
        設計模式梗概
            小引-電器與介面
            Null Object 模式
            Decorator 模式
            Composite 模式
            Adapter 模式
            Factory 模式
        注入方式
            建構式注入
            屬性注入
            方法注入
        Ambient Context 模式
            已知應用例
            範例程式(一)
            範例程式(二)
        Service Locator 模式
        過猶不及-再談建構式注入
            半吊子注入
            過度注入
    第 3 章:DI 容器
        DI 容器簡介
            物件組合
        自製 DI 容器
            自製 DI 容器—2.0 版
            現成的 DI 容器
        物件組合
            使用 XML
            使用程式碼
            自動註冊
            自動匹配
            深層解析
        物件生命週期管理
            記憶體洩漏問題
            生命週期選項
        攔截
            使用 Decorator 模式實現攔截
Part II:實戰篇
    第 4 章:DI 與 ASP.NET MVC 分層架構
        分層架構概述
            Repository 模式
        MVC 分層架構範例 V1-緊密耦合
            領域模型
            資料存取層
            應用程式層
            展現層
            檢視目前設計
        MVC 分層架構範例 V2-寬鬆耦合
            領域模型
            資料存取層
            應用程式層
            展現層
            組合物件
            檢視目前設計
            避免過度設計
        MVC 分層架構範例 V3-簡化一些
            資料存取層
            應用程式層
            展現層
            檢視目前設計
            一個 HTTP 請求搭配一個 DbContext
        ASP.NET MVC 5 的 IDependencyResolver
            實作自訂的 IDependencyResolver 元件
    第 5 章:DI 與 ASP.NET Web API
        ASP.NET Web API 管線
            Controller 是怎樣建成的?
            注入物件至 Web API Controller
        抽換 IHttpControllerActivator 服務
            純手工打造
            使用 DI 容器:Unity
        抽換 IDependencyResolver 服務
            IDependencyResolver 與 IDependencyScope
            純手工 DI 範例
            使用 DI 容器:Unity
            使用 DI 容器:Autofac
    第 6 章:更多 DI 實作範例
        共用程式碼
        DI 與 ASP.NET MVC 5
            練習:使用 Unity
        DI 與 ASP.NET Web Forms
            問題描述
            解法
            練習:使用 Unity
            練習:使用 Unity 的 BuildUp 方法
            練習:使用 Autofac
        DI 與 WCF
            問題描述
            解法
            練習:使用 Unity
            練習:使用 Autofac.Wcf 套件
Part III:工具篇
    第 7 章:Unity 學習手冊
        Unity 快速入門
            Hello, Unity!
            註冊型別對應
            註冊既有物件
            解析
                解析一個物件:Resolve
                具名註冊與解析
                解析多個物件:ResolveAll
            註冊與解析泛型
            檢查註冊
            使用組態檔來設定容器
                Unity 組態檔基本格式
                載入組態檔設定
        註冊與解析-進階篇
            共用的範例程式
                情境
                設計
                程式碼
            自動註冊
                解決重複型別對應的問題
                AllClasses 類別
                WithMappings 類別
            自動匹配
                自動匹配規則
            手動匹配
                循環參考問題
            注入參數
            注入屬性
            延遲解析
                使用 Lazy
                使用自動工廠
            注入自訂工廠
        物件生命週期管理
            預設的生命週期
            指定生命週期
                Transient vs. Per-Resolve
                Per-Request 生命週期
            階層式容器
            選擇生命週期管理員
        攔截
            使用 Unity 容器實現攔截
                Step 1:加入 Unity 的攔截擴充套件
                Step 2:實作攔截行為
                Step 3:註冊攔截行為
附錄一:DI 容器實務建議
    容器設定
        避免對同一個組件(DLL)重複掃描兩次或更多次
        使用不同類別來註冊不同用途的元件
        使用非靜態類別來建立與設定 DI 容器
        不要另外建立一個 DLL 專案來集中處理相依關係的解析
        為個別組件加入一個初始化類別來設定相依關係
        掃描組件時,盡量避免指定組件名稱
    生命週期管理
        優先使用 DI 容器來管理物件的生命週期
        考慮使用子容器來管理 Per-Request 類型的物件
        在適當時機呼叫容器的 Dispose 方法
    元件設計相關建議
        避免建立深層的巢狀物件
        考慮使用泛型來封裝抽象概念
        考慮使用 Adapter 或 Facade 來封裝 3rd-party 元件
        不要一律為每個元件定義一個介面
        對於同一層(layer)的元件,可依賴其具象型別
    動態解析
        盡量避免把 DI 容器直接當成 Service Locator 來使用
        考慮使用物件工廠或 Func 來處理晚期繫結
附錄二:初探 ASP.NET 5 的內建 DI 容器
    實作練習
        步驟 1:建立專案
        步驟 2:加入必要組件
        步驟 3:將 Web API 元件加入 ASP.NET 管線
        步驟 4:加入 API Controller
        步驟 5:撰寫測試用的服務類別
        步驟 6:注入相依物件至 Controller 的建構函式
    結語


閱讀體驗

PDF 的閱讀體驗肯定是三種格式中最好的,但若閱讀裝置的螢幕尺寸夠大的話,其實 EPUB 版本也不差(我外出搭車時就常看 EPUB 版本)。

底下是用電腦閱讀 PDF 檔的畫面截圖:


接著是我在平板上用 Google Books 閱讀本書 EPUB 格式的畫面截圖:




接下來兩張圖是翻拍我的 Kindle 畫面:




由於平板畫面比較小,有些比較複雜的程式碼仍會因為過多折行而增加閱讀的麻煩。一般的文字和圖片,目前看起來是還好,就是圖片仍嫌小了點。

試閱與購買

 您可以透過下列電子書平台試閱或購買本書:
  • Leanpub.com(PDF、EPUB、MOBI,可下載樣章
  • Google 圖書(PDF、EPUB)
  • Pubu (PDF、EPUB,可線上試閱 2015-03-30:由於 Pubu 處理 PDF 檔案有 bug,會造成某些 PDF 的 Table of Content 連結全部失效,故先從 Pubu 下架。

由於各平台的功能有一些差異,使得同一本書在不同書店的定價和閱讀體驗不太一致,這點還請讀者明察。基本上,Leanpub 的功能比較豐富,而 Pubu 與「Google 圖書」則提供了更多種付款方式,而且中文介面用起來更直觀。

關於 Leanpub 的詳細介紹,可參考這篇:如何購買《.NET 相依性注入》,以及購買之後的後續相關問題(例如退還)。

更新通知

每當本書有更新版本,除了利用電子書平台本身提供的郵件通知功能,我也會一併將更新訊息發布於 Facebook 粉絲專頁。故您也可以選擇加入或追蹤上述專頁,以便收到本書的最新訊息。

下載範例程式與補充資料

本書的完整範例程式與相關補充資料都放在 github 網站上。網址如下:
https://github.com/huanlin/di-book-support

Post Comments

技術提供:Blogger.