常見架構命名規則

2021-10-05 08:05:01 字數 3504 閱讀 3229

1. 介面一般會包含乙個process 方法

public inte***ce ieventhandler

handlercontext 類包含 invoke

public static taskinvoke(handlercontext context, object data, taskcompletionsourcetcs = null)

return promise.task;

}

2.  事件(event)委託 命名包含  handler 字尾 , 處理方法 包含 on+ 委託例項

public delegate void mouseeventhandler(object sender, eventargs e);

public event system.windows.forms.mouseeventhandler mouseup;

control.mousedown+= onmousedown;

**

依賴注入#

上述**在一般的情況下是可以正常執行的,但是如果希望以 依賴注入(di) 的方式注入的話,我們就需要將我們的管道組裝進行封裝,方便作為乙個統一的服務注入到系統中。

首先,我們需要定義乙個抽線類,用於管道組裝的抽象封裝,示例**如下所示:

copy

public abstract class pipeline

public output process(input input)

} 然後,我們就可以建立乙個繼承上述抽象類的具體管道組裝類,示例**如下所示:

copy

public class trivalpipeline : pipeline

} 最後,我們可以將 trivalpipeline 這個具體的管道注入到我們的系統中。同樣的,我們也可以直接使用,示例**如下所示:

copy

class program

}條件式組裝#

上述兩個示例**展示的管道組裝式不帶任何條件限制的, 無論引數是否合法都是這樣組裝進管道,但是在實際的開發過程中,我們需要對一定的業務模組進行條件性組裝,所以這個時候我們就需要完善一下我們的**。

首先,我們需要修改上面的 pipeline類,使其繼承 ipipelinestep介面,示例**如下所示:

copy

public abstract class pipeline: ipipelinestep

public output process(input input)

} 然後,我們定義乙個帶條件的管道裝飾器類,示例**如下所示:

copy

public class optionalstep: ipipelinestepwhere input : output

public output process(input input)

} 接著,我們定義乙個新的功能類和支援條件判斷的管道包裝類,示例**如下所示:

copy

public class thisstepisoptional : ipipelinestep

}public class pipelinewithoptionalstep : pipeline

} 最後,我們可以使用如下方式進行測試:

copy

class program

}事件監聽#

有的時候,我們希望在我們管道中執行的每一步,在開始和結束時,上層模組都能獲得相應的事件通知,這個時候,我們就需要需改一下我們的管道包裝器,使其支援這個需求。

首先,我們需要實現乙個支援事件監聽的具體功能類,示例****如下所示:

copy

public class eventstep: ipipelinestep

public output process(input input)

} 然後,我們需要定義乙個能夠傳遞事件引數的管道包裝器類,示例**如下所示:

copy

public static class pipelinestepeventextensions

return step.process(input);

}} 最後,上層呼叫就相對簡單很多,示例**如下所示:

copy

public class doublestep : ipipelinestep

}class program

"); var pipeline = new eventstep(new doublestep());

pipeline.oninput += i => console.writeline($"input value:");

pipeline.onoutput += o => console.writeline($"output value:");

var output = pipeline.process(input);

console.writeline($"output value: ");

console.writeline("\r\n");

//補充:使用擴充套件方法進行呼叫

console.writeline(10.step(new doublestep(), i =>

");},

o =>

");}));

}}輸出結果如下圖所示:

可迭代執行#

可迭代執行是指當我們的管道中註冊了多個功能模組時,不是一次性執行完所以的功能模組,而是每次只執行乙個功能,後續功能會在下次執行該管道對應的**塊時接著執行,直到該管道中所有的功能模組執行完畢為止。該特性主要是通過 yield return 來實現。

首先,我們需要實現乙個該特性的管道包裝器類,示例**如下所示:

copy

public class loopstep: ipipelinestep, ienumerable>

public ienumerableprocess(ienumerableinput)

//等價於下述**段

//return from input item in input

// select _internalstep.process(item);

}} 然後,定義乙個支援上述型別的功能組裝的擴充套件方法,示例**如下所示:

copy

public static class pipelinesteploopextensions

} 最後,上層呼叫如下所示:

copy

class program

}}總結#

通過上述 5 部分示例**的不斷改進,最終我們實現了乙個支援依賴注入和條件式組裝的管道,了解了如何進行管道式程式設計。掌握管道式程式設計可以讓我們對整個專案的架構和**質量都有很大幫助,感興趣的朋友可以自行查閱相關資料進行深入研究。

相關參考#

walkthrough: creating a dataflow pipeline

pipelinestyle

常見的程式命名規則

正確並形象地給函式 變數命名,不僅可以增加程式的可讀性,也是程式設計師程式設計風格的一種反映。較好的命名習慣,可以有效的提高程式的可維護性。以下介紹幾種常用的變數命名規則。一 匈牙利命名法 廣泛應用於microsoft windows這類環境中。這種命名技術是由一位能幹的 microsoft 程式設...

匈牙利命名規則

匈牙利命名規則建議變數名稱以乙個或多個字母開頭,這些小寫字母用以標識其變數型別,型別標識字母的下乙個字母一般採用大寫。型別定義使用相同的型別識別符號作為字首,唯一不同的是,型別定義名稱一般全部使用大寫。表1 匈牙利命名規則約定 字首 資料型別 例子 b boolean bispresent,bval...

元件命名規則

元件命名規則 c和p的命名規則 tinyos 所有的終端程式元件都以字母c或p為結尾。以c結尾所命名的元件表示它是乙個可用的抽象,而以p結尾的元件則表示它是私有的。以p結尾的元件不能被直接的連線,但可以對它做一些封裝以使它變成可用 變成名字以c結束的 硬體平台抽象命名規則 tinyos 2.0中的硬...