2017年8月26日 星期六

[打造自己的template-建立一致性程式碼][02]了解template類型和建立出要變成範本的程式

[打造自己的template-建立一致性程式碼][02]了解template類型和建立出要變成範本的程式
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

上篇了解了template的重要性之後,在這篇將會先介紹Visual Studio裡面的兩種Template:Project Template和Item Template。

了解完兩種template類型之後,將會開始打造我們的template。這邊會以一個我自己的的open source console專案作為之後範本的目標,然後建立出一個實用這個套件的簡單console程式,未來會被用來做於template。

Template類型

在Visual Studio(之後都統稱VS)裡面有兩種template:

  1. Project Template
  2. Item Template

Project Template

當我們開啟VS之後,做的第一件事情一定是File > New > Project

這個時候會打開一個視窗,裡面可以選的範本就是所謂的Project Template。

file new project畫面
選project的視窗
file new project和選project的視窗

從選範本的視窗可以看出,會先依照語言類型(例如C#還是Visual Basic)然後裡面會在分例如Web還是.Net等。

Item Template

當我們建立好Project之後,會開始建立檔案,例如要在加入一個cs檔案 - 這個時候我們會對要加入的資料夾(或專案;如果是根目錄)點右鍵 Add > New Item

這個時候會跳出一個視窗讓你選要建立的類型。這些範本就是所謂的Item Template

Add New item
item template視窗
Add New item和跳出來的視窗

依照目前的Project不同呈現的Item Template也會不同,然後裡面也是依照類型區分,例如是web類型。

準備建立自己的Project Template

在對Template的類別和這些Template的視窗內容大概長什麼有些了解之後,我們就準備來建立一個自己的Project Template。

在開始介紹如何建立之前,需要先給各位一個情境 - 我們是為了什麼而建立Template?

快速介紹MHAT-ConsoleApp-ProcessTemplate專案

在這邊讓我快速介紹一下這個專案。

相信大家應該都有寫過console,寫console的時候都會遇到幾個問題:

可以傳什麼參數不清楚,說明也不清楚,參數組合也不清楚
一般來說有時候console會因為參數不同功能也不同,在複雜一點還有可能當某個參數有值另外一個參數也要 - 但是搭配別的參數就不一定要。
console沒有辦法針對某個階段做處理

寫過Asp .net就會知道,我們有些想要在request進來要處理,有些是request要出去的時候要做處理。這些是因為asp .net有把不同階段切出來

console則是沒有這個概念,造成了有時候想要在執行實際內容前想要做驗證都要自己切割。

持續輸入類型的console
例如有可能是開著等使用者輸入,輸入一次處理一次直到使用者把程式關掉。

這些細節每次寫console都要再次處理其實很浪費時間。因此這個專案誕生,讓整個處理變得非常簡單。

這個專案也很適合寫Project Template,未來開console就不用VS內建的版本。

準備未來範本長的樣子

既然我們有了情境之後,首先我們先建立出,未來範本建立出來時候長的樣子。

這個專案提供兩種模式:

  1. 一種是持續輸入類型的
  2. 一種則是執行一次就結束那種

這次的範本先建立執行一次就結束。建立步奏如下:

  1. 建立一個一般的console程式
  2. 透過nuget安裝套件:Install-Package MHAT.ConsoleApp.ProcessTemplate
  3. 最後調整應該要包含的檔案

1. 建立一個一般的Console程式

首先先建立出一個Console專案:先開VS然後透過New > File > Project建立出一個一般的console程式:

建立一個console程式
建立一個console程式

2. 安裝套件 MHAT.ConsoleApp.ProcessTemplate

這個時候透過nuget直接安裝套件 Install-Package MHAT.ConsoleApp.ProcessTemplate

安裝MHAT.ConsoleApp.ProcessTemplate
安裝套件

3. 最後調整應該要包含的檔案

這個專案的目的是在使用這個套件的時候比較容易,因此我會先定義好一些資料夾結構和一個範例的程式碼讓使用的時候更加方便。

這邊的範例會是建立一個echo的console程式,也就是使用者傳入某個參數,console會把那個參數的內容輸出出來。

在使用這個套件的時候,基本上有3個地方要處理:

1. 建立一個代表傳入參數的model

這個會讓我們在取得傳入參數的時候更加方便。

先建立一個資料夾叫做Model,在Model資料夾裡面建立一個cs檔案叫做EchoProcessOption.cs,裡面內容如下:

using CommandLine;

namespace MHAT.ConsoleWithOption.Model
{
    public class EchoProcessOption
    {
        [Option('t', "text", Required = true, HelpText = "要console呈現的內容")]
        public string Text { get; set; }
    }
}
2. 建立一個process

process讓我們可以做一些不同時間的處理:PreProcessProcessPostProcess(還有幾個但是沒有列出來)

先建立一個資料夾Process,在這個資料夾建立一個cs檔案叫做EchoProcess.cs,裡面內容如下:

using MHAT.ConsoleApp.ProcessTemplate;
using MHAT.ConsoleWithOption.Model;

namespace MHAT.ConsoleWithOption.Process
{
    public class EchoProcess : BaseExecuteProcessTemplate<echoprocessoption>
    {
        protected override void PreProcess()
        {
            Console.WriteLine("準備輸出傳入的參數.....");
            base.PreProcess();
        }

        protected override void Process()
        {
            Console.WriteLine($"您輸入的是:{ArugemntOption.Text}");
            base.Process();
        }

        protected override void PostProcess()
        {
            Console.WriteLine("完成輸出輸入的參數");
            Console.WriteLine("程式關閉");
            base.PostProcess();
        }
    }
}
    
3. 在Program.cs執行EchoProcess

這個部分是要執行process的部分,因此在Program.cs裡面調整程式碼如下:

using MHAT.ConsoleWithOption.Process;

namespace MHAT.ConsoleWithOption
{
    class Program
    {
        static void Main(string[] args)
        {
            var process = new EchoProcess();
            process.StartProcess(args);
        }
    }
}
整個建立出來長的樣子
整個建立出來長的樣子

測試剛剛建立的程式

上面的步奏建立好了之後,build一下,我們就可以測試我們的程式。

開啟一個cmd然後直接執行MHAT.ConsoleWithOption.exe

這個時候會出現一個說明畫面,會看到有個參數叫做-t或者-text是必填(Required),主要目的是希望console要印出來的內容。

這時候我們調整,改成輸入MHAT.ConsoleWithOption.exe -t "Hello World",這個時候就會列印出我們process裡面寫的pre、process和post裡面的內容。

整個的測試截圖
整個的測試截圖

結語

在這篇先了解了VS裡面的兩種不同的Template:Project Template和Item Template。

再來為了讓我們之後有更好的情境,介紹了一個自己寫的console套件。

依照這個套件寫了一個簡單的echo console程式。這個echo程式的結構就是未來我們建立Project Template的時候希望產生的內容。

在下篇將會透過最簡單的方式產生Project Template - 透過VS的匯出功能。


沒有留言 :

張貼留言