EC筆記:第4部分:18、介面正確使用,不易被誤用

来源:http://www.cnblogs.com/SkyFireITDIY/archive/2016/12/29/6231425.html
-Advertisement-
Play Games

好的介面容易被正確使用,不易被誤用 考慮以下函數: void func(int year,int month,int day){ //一些操作 } 這個函數看似合理,因為參數的名字已經暴露了它的用途。但是如果只有寒暑簽名呢?如下: void func(int,int,int); 就算我告訴你,此處需... ...


  • 好的介面容易被正確使用,不易被誤用

考慮以下函數:

void func(int year,int month,int day){

    //一些操作

}

這個函數看似合理,因為參數的名字已經暴露了它的用途。但是如果只有寒暑簽名呢?如下:

void func(int,int,int);

就算我告訴你,此處需要日期作為參數,你可能會以月日年、日月年等不同形式作為參數。

正確的做法是把年月日都各自抽象為一個類(或者說是結構體):

struct Year {

    int year;

};

 

struct Month {

    int month;

};

 

struct Day {

    int day;

};

 

void func(Year year,Month month,Day day){

    //一些操作

}

這樣即使你只有函數簽名,也不會輕易出錯。

  • 用於內置類型的行為相容

儘量要在行為上與現有類型相容,因為一般用戶會先與類型作為參考。

如:int類型不支持:

int a=5;

int b=6;

int c=50;

a+b=c;//錯誤

那麼你自己定義的類型,也不應該有類似的語法:

MyType a;

MyType b;

MyType c;

a+b=c;//儘量不要這樣去做,除非你有更好的理由

  • 建立新類型、限制類型上的操作、束縛對象值、消除客戶的資源管理責任

為了防止用戶犯錯,一般的方式就是為我們的新類型加上各種限制,比如限定月份的值為1到12,日期的值為1到31等。在用戶輸入非法的值的時候給出明確的提示或警告。

  • 設想各種被應用的場景

我們要假設用戶各種可能犯錯的場景,比如,在多線程環境中使用,如果不支持多線程,就應該明確的在文檔中輸出。或者是,用戶的非法輸入,非法調用,我們應該儘可能地進行合法性檢驗。

儘可能讓用戶在不改變現有使用習慣的情況下,儘可能的少出錯。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.母板頁_Layout.cshtml類似於傳統WebForm中的.master文件,起到頁面整體框架重用的目地1.母板頁代碼預覽 2.子頁面標題的設置雖然多個子頁面可以引用同一個母板頁,但不同的頁面標題可以單獨設置。@ViewBag.Title 即是一個標題的占位符,在Control里或頁面中給該 ...
  • 新工作入職不滿半周,目前仍然還在交接工作,適應環境當中,筆者不得不說看別人的源碼實在是令人痛苦。所幸今天終於將大部分工作流暢地看了一遍,接下來就是熟悉框架技術的階段了。 也正是在看源碼的過程當中,有一個比較明顯的用法細節引起了我的註意,我發現一位同事在請求遠程Web Api時,雖然使用了 類,但是在 ...
  • 快速開發相對於其他開發方式有什麼優勢?能為你節省多少成本? ...
  • VS項目中使用Nuget還原包後編譯生產還一直報錯? ...
  • 申請博客 ...
  • 在上一篇C#多線程之線程池篇1中,我們主要學習瞭如何線上程池中調用委托以及如何線上程池中執行非同步操作,在這篇中,我們將學習線程池和並行度、實現取消選項的相關知識。 三、線程池和並行度 在這一小節中,我們將學習對於大量的非同步操作,使用線程池和分別使用單獨的線程在性能上有什麼差異性。具體操作步驟如下: ...
  • 安裝了Visual Studio的那些使用微軟平臺的開發者通常能夠非常容易地操作自己的項目:打開解決方案,修改內容,設置好所有必須的文件以及配置後編譯項目。但是在構建伺服器或者持續交付系統等沒有安裝Visual Studio的環境中,編譯項目和解決方案是非常難的。 對於這一問題,微軟之前給出的方案是 ...
  • 高級FTP伺服器開發 一,作業要求 高級FTP伺服器開發 二,程式文件清單 Folder目錄:用戶文件目錄 bin目錄:程式啟動文件目錄 conf目錄:用戶配置文件目錄 core目錄:程式核心代碼目錄 log目錄:程式日誌文件目錄 三,程式流程簡圖 四,程式測試樣圖 創建賬戶 用戶登錄 基本操作 五 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...