🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

之前有介紹 (SQL Server) CTE RECURSIVE (遞迴)製作月曆 在Oracle 有提供一個精簡的語法產生階層資料 CONNECT BY

 CONNECT BY 有幾個常用Key Word.

  1. LEVEL 目前在樹節點第幾階層
  2. START WITH 設定哪筆做為起始點開始樹
  3. PRIOR 用於指定父資料欄位

製造出的階層樹,概念如下

[圖來自Oracle]

範例一

建立連續數字 1~10
<code class="language-sql">SELECT X + LEVEL
FROM (
  SELECT 0 X
  FROM DUAL
 )
CONNECT BY LEVEL <= 10

此範例使用 LEVEL CONNECT BY 上當條件 建立列值到LEVEL 大於等於 10

sqlfiddle

Read more »

前言

本篇利用RabbitMQ client來簡單實現MQ功能.

在RabbitMQ中有很重要兩個角色,ProducerConsumer,下面這個範例使用c# console來實現.

我個人覺得APMQ協議和Http協議有點類似,一樣有Header(Properties),body…等等概念.

Producer Code

一開始我們宣告一個 ConnectionFactory 並設置RabbitMQ Server連接參數

  • UserName:使用者帳號
  • Password:使用者密碼
  • HostName:連接FQDN或IP

RabbitMQ預設密碼是 guest

//建立連接工廠
ConnectionFactory factory = new ConnectionFactory
{
    UserName = "guest",
    Password = "guest",
    HostName = "localhost"
};

呼叫factory.CreateConnection 建立連接RabbitMQ連接物件,並呼叫 CreateModel方法建立一個channel Model

Read more »

前言:

如果目前場景遇到一定流程階段,但流程內容依照邏輯或情境不同也有所不一樣. 這時可以考慮使用樣板模式(TemplatePattern)

生活舉例:

因為十二年國教,所以基本上每個人都有上學的經驗

每天上學最少要經歷下面過程(我做一些簡化)

到學校=>上午上課=>吃午餐=>下午上課=>放學回家

可以看到不管是國小、國中、高中 至少都有上述的過程

但每個過程內容可能會依照年級階段不同,也有所不一樣

例如:

  • 吃中餐:高中可能是吃便當,但國小是吃營養午餐,雖然都是吃飯但內容不一樣。
  • 上午上課:都是教數學,但高中教微積分,國小教加減乘除。
Read more »

Autofac 是個IOC容器  不懂IOC 參考 我之前寫
IOC(控制反轉),DI(依賴注入) 深入淺出~~

小弟之前有一個開源框架【C#】 AOP輕型框架 AwesomeProxy.Net 介紹使用 裡面簡單介紹 AOP核心概念和如何實作!

Autofac 有寫一個 Autofac.Extras.DynamicProxy 把AOP和IOC容器融合的框架

在Autofac使用AOP 需要實現下面幾個步驟

本次範例我們從資料庫中撈取時間資料出來,並使用Thread.Sleep(5000) 作出延遲,判斷時間是否前後一致。

第一步(定義攔截器):

我們撰寫一個快取的攔截器繼承IInterceptor 介面,並實現Intercep方法

其中 IInvocation 參數有許多有用的資料

  • Arguments:傳入方法中的參數
  • InvocationTarget :被代理物件
  • MethodInvocationTarget:被代理物件的呼叫方法資訊
  • Proxy:代理物件
  • Method:代理的呼叫方法資訊
  • ReturnValue:呼叫方法的回傳值

這幾個欄位是我們比較常用的資訊

Read more »

前言:

市面上有許多IoC容器 Ninject,Unity….

雖然容器眾多但要解決的問題和概念是一樣

今天使用Autofac 介紹一下IoC容器

不了解 IoC 概念可參考 我之前寫 IOC(控制反轉),DI(依賴注入) 深入淺出~~

Autofac是一個 Ioc 容器

眼尖的讀者會發現我把Ioc跟容器這兩個字使用兩個不同顏色

原因是Autofac這個框架其實做到兩個概念.

  • IoC(Inversion of Control)
  • 管理物件的容器
Autofac框架幫我們實現可以管理物件生命週期並提供依賴注入相對應的物件中
Read more »

前言:

目的:

如果有兩大類模組是多對多的組合,如本次Smaple Code. Nick和Addidas 包包都有紅、藍、黃….或其他顏色

就可能呈現下面6種組合

  • Nick(紅)
  • Nick(藍)
  • Nick(黃)
  • Addidas(紅)
  • Addidas(藍)
  • Addidas(黃)

如果此建立類別的話 可能情況如下面的UNL圖

類別數量 = 顏色數量 * 包包品牌數量

這樣會有兩個問題

  1. 隨著品牌和顏色增多,包包類別數量急速增長 (X = m*n)個
  2. 顏色我們可看做一個抽象 不應當和包包合在一起
Read more »

前言:

之前有和大家分享使用CASE WHEN 搭配聚合函數實現樞紐分析

但今天如果我們要轉換成行的列希望是動態依照目前資料庫的欄位要處理呢?

我們可以使用Dynamic pivot

``Dynamic pivot 核心概念其實是把我們要使用的pivot SQL`語法動態產生出來

程式碼

CREATE TABLE T(
    userName VARCHAR(100),
    Price int,
    Dt DATE
);

INSERT INTO T VALUES ('Tom',100,'2017-01-01');
INSERT INTO T VALUES ('Amy',200,'2017-01-02');
INSERT INTO T VALUES ('Tom',1311,'2017-01-03');
INSERT INTO T VALUES ('Tom',122,'2017-03-01');
INSERT INTO T VALUES ('Tom',111,'2017-04-01');
INSERT INTO T VALUES ('Amy',232,'2017-05-01');
INSERT INTO T VALUES ('Tom',2312,'2017-05-02');
INSERT INTO T VALUES ('Tom',23,'2017-05-03');

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);

SET @SQL = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)  
            FROM T 
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = 'SELECT userName,'+@cols+' FROM T GROUP BY userName' ;

EXECUTE sp_executesql @query

因為範例我們使用 SQL SERVER

所以使用 FOR XML PATH 語法將我們** CASE WHEN pivot SQL **語法產生並把他附值給 @cols 變數

SET @cols = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)  
            FROM T 
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
Read more »

前言:

某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??

難道只能整個反組譯,查看程式碼翻一份做新的嗎?

不~~其實有辦法直接對於DLL進行修改

只需使用 ** Reflexil 搭配 ILSpy 或其他支援的反組譯​軟體 **

Reflexil 是一個組譯編輯器插件目前支援 ReflectorILSpy 和 Telerik’s JustDecompile

下載連結

Reflexil **Release 2.2 搭配 ILSpy version 3.2 


前置動作,安裝

Read more »

之前有介紹 (SQL Server) CTE RECURSIVE (遞迴)製作月曆 在Oracle 有提供一個精簡的語法產生階層資料 CONNECT BY

 CONNECT BY 有幾個常用Key Word.

  1. LEVEL 目前在樹節點第幾階層
  2. START WITH 設定哪筆做為起始點開始樹
  3. PRIOR 用於指定父資料欄位

製造出的階層樹,概念如下

[圖來自Oracle]

範例一

建立連續數字 1~10
<code class="language-sql">SELECT X + LEVEL
FROM (
  SELECT 0 X
  FROM DUAL
 )
CONNECT BY LEVEL <= 10

此範例使用 LEVEL CONNECT BY 上當條件 建立列值到LEVEL 大於等於 10

sqlfiddle

Read more »

前言

本篇利用RabbitMQ client來簡單實現MQ功能.

在RabbitMQ中有很重要兩個角色,ProducerConsumer,下面這個範例使用c# console來實現.

我個人覺得APMQ協議和Http協議有點類似,一樣有Header(Properties),body…等等概念.

Producer Code

一開始我們宣告一個 ConnectionFactory 並設置RabbitMQ Server連接參數

  • UserName:使用者帳號
  • Password:使用者密碼
  • HostName:連接FQDN或IP

RabbitMQ預設密碼是 guest

//建立連接工廠
ConnectionFactory factory = new ConnectionFactory
{
    UserName = "guest",
    Password = "guest",
    HostName = "localhost"
};

呼叫factory.CreateConnection 建立連接RabbitMQ連接物件,並呼叫 CreateModel方法建立一個channel Model

Read more »