【開源系列】三國演義LBS (四)源碼:基礎架構:驗證

來源:互聯網
上載者:User

前言

-----------------------------------------------

本隨筆介紹了基礎架構中的驗證架構,包含了串式驗證、異常捕捉機制、智能拋異常。
下一篇隨筆將介紹基於IL的反射架構,極大提高反射效能。

相關討論群組入口: http://www.pixysoft.net/ (點擊進入)

 

 

快速入門

----------------------------------------------- 

帶追蹤記錄的異常捕捉機制

當我們的項目變得龐大,異常有可能會在多個日誌被記錄,導致了查看日誌困難,編寫代碼的時候又不明確是否需要捕捉這個異常。

因此,我就想,如果這個異常曾經被捕捉過記錄了,那麼他繼續往下拋的時候,能夠被識別出來不再記錄。於是有了這個跟蹤機制: 

        /// <summary>
        /// 測試異常捕捉機制
        /// </summary>
        public void test001()
        {
            try
            {
                Method1();
            }
            catch (Exception ex)
            {
                if (Exceptions.IsHandled(ex))
                    return;

                //由於異常已經被Method2捕捉,所以外部例外狀況將被忽略 不會處理到此

                Console.WriteLine("error here.");
            }
        }

        private void Method1()
        {
            try
            {
                hello(null);
            }
            catch (Exception ex)
            {
                if (Exceptions.IsHandled(ex))
                    throw ex;

                //由於異常沒有被處理過,所以會被記錄

                Console.WriteLine("write down something in method2");

                throw Exceptions.Parse(ex).Handle();
            }
        }

        private void hello(string hello)
        {
            hello = hello.Trim().ToUpper();

        } 

 

上面的例子,僅僅會輸出"write down something in method2" ,而不會有"error here",因為他之間被捕捉過之後,內部設定了時間戳記了。

 

 

 

自動對方法參數簽名記錄的異常拋出機制:

我們很多時候要對輸入參數進行驗證,如果出現null 指標就要拋出(這就是防範式編程的思路) 。但是拋出每次都要寫入一大堆的文字說明很麻煩,因此有了以下的機制:

        /// <summary>
        /// 輸入參數驗證的捕捉
        /// </summary>
        public void test002()
        {
            try
            {
                Method2("aaa", "bbb");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

                //輸出為:

                //[Method2] input(s) invalid.
                //Pixysoft.Framework.Verifications::Pixysoft.Framework.Verifications.testcase.Method2(String name,String value)
                //::String name = aaa;
                //::String value = bbb;
            }
        }

        private void Method2(string name, string value)
        {
            throw Exceptions.VerificationFailedException(name, value);

        } 

 

只要拋出這個異常,就能自動擷取拋出的方法名、入口參數等等資訊,極大簡化代碼量。

 

 

串式驗證機制:

對於入口參數進行驗證,代碼又多有重複,有人用了什麼AOP之類的“重型” 架構,有點得不償失,因此我參考了別人的設計,得到了以下的代碼:

        /// <summary>
        /// 串式驗證
        /// </summary>
        public void test003()
        {
            Console.WriteLine(
                Verification.Verifies(2, 3).IsNotNullOrEmpty().IsGreater(1).IsLess<int>(4).Result());

        } 

 

下期預告:

-----------------------------------------------   

 

Pixysoft.Framework.Reflections 反射架構

完全基於IL,模仿微軟的Type結構,實現反射功能+AOP功能,極大的提升效能。例如在Java中常見的BeanMap都會出現。敬請留意! 

 

附件下載

-----------------------------------------------   

Pixysoft.Framework.Verifications打包下載:

http://www.boxcn.net/shared/5ja9gzysix 

SVN同步:

http://qun.qq.com/air/#95755843/share 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.