框架必須以易于使用的方式來為普通用戶提供一個(gè)低門欄。

每個(gè)人在第一次接觸一個(gè)新框架時(shí),都希望其是簡(jiǎn)單而功能強(qiáng)大的。如果他一開始就感覺其很復(fù)雜,則會(huì)望而卻步。

  • 要確保每個(gè)特性域的名字空間只包含哪些用于最常見場(chǎng)景的類型。應(yīng)該把用于更高級(jí)的場(chǎng)景的類型放在子名字空間中。
    例如:System.Net命名空間提供了有關(guān)網(wǎng)絡(luò)的主要API,而更高級(jí)的socket API則位于System.Net.Socket子命名空間。
  • 要為構(gòu)造函數(shù)和方法提供簡(jiǎn)單的重載函數(shù)。參數(shù)少,且都是基本類型。
  • 不要在為主要的使用場(chǎng)景而設(shè)計(jì)類型中包含用于高級(jí)場(chǎng)景(這里我個(gè)人感覺是不常用的意思)的方法。
    通過從框架中減少(或至少不增加)特性,能夠使開發(fā)人員更有效率。因?yàn)樾枰幚淼母拍顪p少了。CLR把多重繼承排除在外就是這個(gè)原因。
  • 不要要求用戶在最基本的場(chǎng)景中顯示地實(shí)例化一個(gè)以上的類型。
  • 不要要求用戶在為基本使用場(chǎng)景編寫代碼之前就進(jìn)行大量的初始化。
    如果一些初始化是必需的,那么當(dāng)用戶未執(zhí)行初始化而引起異常時(shí),應(yīng)該在異常消息中清楚的告訴用戶需要做些什么。
  • 要盡可能地(用便利的重載函數(shù))為所有的屬性和參數(shù)提供合適的默認(rèn)值。
    當(dāng)然不要盲目采用,如果默認(rèn)值會(huì)引起錯(cuò)誤,自然不可取。
  • 要通過異常來傳達(dá)API的誤用。
    顯示錯(cuò)誤的原因、如何修正等信息。