主頁 > .NET開發 > 12月日常開發小結

12月日常開發小結

2021-12-27 06:02:04 .NET開發

一、例外資訊

之前做了一個例外通知的需求,簡單來說就是程式執行例外了發送一封郵件和通知給指定的人員,我的做法也很簡單,在利用例外捕獲在catch中將捕獲到的例外發送.

上線之后有同事說例外了沒有發,我也不知道是不是真的例外了沒發,因為之前自己測了好多遍通過了的,抱著將信將疑的態度去結合日志分析代碼,后面發現確實是這樣.

代碼如下:

public Task Execute()
{
    try
    {
        CalculationRawData();
    }
    catch (Exception ex)
    {
               PushException?.Invoke(this, new ExceptionResponse(Company, nameof(CalculationJob),ex));
    }
        return Task.FromResult(0);
}
            
 public void CalculationRawData()
 {
     try
     {
         //dosomthing
     }
     catch (Exception ex)
     {
         Logger.Writelog("ex.InnerException.Message");
     }
 }

為什么沒有被發送?

根據上面2段代碼分析出,在CalculationRawData方法中雖然捕獲了例外但是并沒有拋出,所以導致Execute沒有接收到例外,自然也不會呼叫發送介面.
所以日常開發中對例外的處理只用一個統一的入口,在業務中盡量不要對例外進行處理,因為處理不好會導致真正有用的問題資訊被吞了,增加排查成本.

二、implicit 和 explicit

講道理作業這些年,這2個關鍵字基本沒用過,應該不止我一個人吧!!

implicit 關鍵字用于宣告隱式的用戶自定義的型別轉換運算子, 如果可以確保轉換程序不會造成資料丟失,則可使用該關鍵字在用戶定義型別和其他型別之間進行隱式轉換,

explicit 關鍵字宣告必須通過顯示的呼叫用戶定義的型別轉換運算子來進行轉換,

1.implicit
 //自定義轉換類
 public struct TimeRange
 {
     public DateTime StartTime { get; set; }
     public DateTime EndTime { get; set; }
     public TimeRange(DateTime startTime, DateTime endTime)
     {
         StartTime = startTime;
         EndTime = endTime;
     }

     public static implicit operator double(TimeRange timeRange)
     {
         return (timeRange.EndTime - timeRange.StartTime).TotalHours; ;
     }
 }
static void Main(string[] args)
{
    DateTime star = DateTime.Now;
    DateTime end = DateTime.Now.AddDays(1);
    //根據起始日期和結束日期算出間隔時間,默認隱式轉換
    double result =  new TimeRange(star, end);
}
2.explicit
static void Main(string[] args)
{
    DateTime star = DateTime.Now;
    DateTime end = DateTime.Now.AddDays(1);
   //根據起始日期和結束日期算出間隔時間,必須顯示宣告轉換
    double result =  (double)new TimeRange(star, end);
}

三、快速轉換

1.快速將Int陣列轉換為String陣列
int [] arr = new int[] { 4,2, 4,6 };

string[] result = Array.ConvertAll(arr, Convert.ToString);
2.快速將List<string>轉換為List<int>
 List<string> list = new List<string>() { "1","2","3","1"};
 var result = list.ConvertAll(int.Parse);

四、這可能是真的

其實并不代表是這一個月的小結,有一部分其實也有挺長一段時間了,所以記錄一下,

1.為什么會產生Bug

就我自己根據這些年的開發經驗和親身經歷和做過的專案,如果一旦程式出問題,無論是從承擔責任或者解決問題的角度來說,從設計>開發>測驗>運維>實施>直到用戶,第一個祭天的永遠是開發人員,確實因為東西是你做的,設計人員會說已經跟你講清楚了,運維和測驗人員會說誰知道你寫的什么東西,Bug測都測不出來,最后連實施都會和用戶一起鄙視你" 這tm什么垃圾軟體",

首先我得闡明我的態度,這不是針對誰,因為每個人都很不容易,并且很努力,有些觀點可能不太容易被認可或者接受,但是確實是這么回事,因為這個東西是見人見智的,胡說胡有理,如果有人真的很在意,可以當做一個吐槽來看.
現實雖然就是這么無奈,但是我們必須去面對,因為只有剖析出問題所在,才能更清晰的看到本質,以至于得到實實在在的提高,在此作為一個開發總結了一下,產生Bug主要有以下幾大原因:

1. 模糊的需求

有時候有一個需求來了,并沒有仔細的去閱讀需求,也沒有仔細去和提出需求的人進行需求交底和反向交底,因為在普遍開發的認知里,寫需求的人都是不懂需求的人,加上在無數次的"這是哪個xx提的需求?","為什么要這樣啊?","真tm xx"

經過了長時間歲月的打磨,導致大部分在閱讀需求時只是囫圇吞棗式的快速掃描一眼, 掃描程序中只摘取一些敏感字眼,然后全憑自己想當然,久而久之養成了一種先入為主的習慣,然后做出來的需求就是......額 ,不敢想象.

如何解決?

一定要仔細客觀的閱讀并核對用戶提出的需求,然后獨立分析進行反向交底,哪怕是一張很抽象的圖,或者幾行字都行,因為你說的話有可能在當時只是你自己認為自己講清楚了,恰恰并不是每個人都能明白你的意思,又或是你壓根就沒說清楚,就算多耗點時間也沒關系,磨刀不誤砍柴工,如果可能拉上測驗,至于為什么,那就是避免你后續做完之后,再講第二次,第三次,懂的都懂.

2. 超乎尋常的自信

我覺得作為開發自我認可的標準并開發不是寫代碼多6,解Bug做需求多快,而是迷之自信,最騷的是不接受反駁,寫完就提測,不說單元測驗,連基本的過一遍都沒有,恰恰這樣卻帶來了不少壞處,理想的情況就是在測驗階段問題被發現了,然后一堆Bug,不太理想的情況就是測驗也沒測出來,然后被用戶測出來了...

如何解決?

1.在寫完之后,自己先整體CodeReview一遍,通常可以發現一些寫法和設計缺陷并及時修改,然后最少測驗3遍,測驗3遍,測驗3遍.

2.對于大的功能模塊,寫出開發版本的測驗用例,寫了你才能更好的進行單元測驗.

3. 鍛煉自己的編碼內功

對API不熟悉,掌握程度不夠導致出現的比比皆是,所以在用任何一個自己感覺不熟悉的api時,一定要查清楚他的方法,例如獲取字典集合中取一個不存在的key "a1"對應的值,不熟悉的人經常寫出直接取keyValuePairs["a1"]那就直接錯了,正確使用keyValuePairs.TryGetValue("a1",out int c),像這樣的細節還有很多,不一一列舉,只是想表達這個意思

 Dictionary<string, int> keyValuePairs = new Dictionary<string, int>();
 keyValuePairs.Add("a", 2);
 keyValuePairs.Add("b", 3);

4. 不及時復盤

為什么說要及時復盤?可以將日常開發的一些小技巧,或者解決過的典型Bug和解決辦法,例如常見的

1.未將物件參考到實體.
2.引數長度超出資料庫可存盤的范圍.
3.索引越界.
4.某個特殊的業務導致需要特殊處理.

都記下來,然后定期或者不定期的拿出來復盤一下,或者在新需求做完之后,把記錄拿出來作為標準檢查一下,保證之前犯過的錯,和解決過的問題不會再出現,

5. 不要帶著情緒做事情

這個自行腦補吧,因為每個人都有自己的個性和脾氣,你可以不認可所有人,也可以認為所有人都是垃圾,但是在作業中不要表現出來帶著情緒做事,這樣會對你周圍,或者對你自己有很大影響,謹記"要么忍,要么滾"!

6. 測驗不靠譜

為什么說測驗不靠譜,不是特意為鄙視或者挑起沖突而說的,也只是客觀的,因為在絕大部分的小公司中的測驗都是針對業務線的,加上水平也層次不齊,遇到一個經驗相對豐富,會寫Sql或者對絕大部分測驗工具或者性能測驗熟悉的你就偷著樂吧,因為我遇到的有一部分連用例都不寫,我不知道是不會寫,還是說嫌太麻煩了,上來一通亂點,以至于連自己點到哪里了都不清楚,

假如無法改變,又必須解決呢?

1.提高代碼健壯性,減少bug把問題風險降到最小.

2.換個環境可能會好一點,但也有可能更糟糕...

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/393827.html

標籤:.NET技术

上一篇:使用.NET 6開發TodoList應用(8)——實作全域例外處理

下一篇:.NET 通用多條件動態引數查詢方法 - SqlSugar ORM

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more