[網摘].NET 程式員十種必備工具-CodeSmith

來源:互聯網
上載者:User
CodeSmith

CodeSmith 是一種基於模板的代碼產生工具,它使用類似於 ASP.NET 的文法來產生任意類型的代碼或文本。與其他許多代碼產生工具不同,CodeSmith 不要求您訂閱特定的應用程式設計或體繫結構。使用 CodeSmith,可以產生包括簡單的強型別集合和完整應用程式在內的任何東西。

當您產生應用程式時,您經常需要重複完成某些特定 的任務,例如編寫資料存取碼或者產生自訂集合。CodeSmith 在這些時候特別有用,因為您可以編寫模板自動完成這些任務,從而不僅提高您的工作效率,而且能夠自動完成那些最為乏味的任務。CodeSmith 附帶了許多模板,包括對應於所有 .NET 集合類型的模板以及用於產生預存程序的模板,但該工具的真正威力在於能夠建立自訂模板。為了使您能夠入門,我將快速介紹一下如何產生自訂模板。

產生自訂模板

CodeSmith 模板只是一些可以在任意文字編輯器中建立的文字檔。它們的唯一要求是用 .cst 副檔名來儲存它們。我將要產生的樣本模板將接受一個字串,然後基於該字串產生一個類。建立模板的第一步是添加模板頭,它可聲明模板的語言、目標語 言以及簡要模板說明:

模板的下一部分是屬性聲明,在這裡可聲明將在模板每次運行時指定的屬性。就該模板而言,我要使用的唯一屬性只是一個字串,因此屬性聲明如下所示:

該屬性聲明將使 ClassName 屬性出現在 CodeSmith 屬性視窗中,以便可以在模板運行時指定它。下一步是實際產生模板主體,它非常類似於用 ASP.NET 進行編碼。您可以在下面的代碼塊中查看該模板的主體。

//Custom Template
public sealed class <%=?ClassName?%>
{
      private static volatile <%=?ClassName?%> _instance;
      private <%=?ClassName?%>() {}
      private static readonly object _syncRoot = new object();

      public static <%=?ClassName?%> Value
      {
            get
            {
                  if (_instance == null)
                  {
                        lock(_syncRoot)
                        {
                              if (_instance == null)
                              {
                                     _instance = new <%=?ClassName?%>();
                               }
                         }
                   }
                  return _instance;
             }
       }      
}

//SingletonClass
public sealed class SingletonClass
{
      private static volatile SingletonClass _instance;
      private SingletonClass() {}
      private static readonly object _syncRoot = new object();

      public static SingletonClass Value
      {
            get
            {
                  if (_instance == null)
                  {
                        lock(_syncRoot)
                        {
                              if (_instance == null)
                              {
                                     _instance = new SingletonClass();
                               }
                         }
                   }
                  return _instance;
             }
       }      
}

正 如您所見,該模板接受字串輸入並使用該類名產生單獨的類。在模板主體中,使用與 ASP.NET 中相同的起始和結束標記。在該模板中,我只是插入屬性值,但您還可以在這些標記內部使用任意類型的 .NET 代碼。在該模板完成之後,您就可以通過雙擊它或者從 CodeSmith 應用程式中開啟它將其載入到 CodeSmith 中。顯示了已經載入到 CodeSmith 中的該模板。

您可以看到左側的屬性正是我在該模板中聲明的屬性。如果我輸入“SingletonClass”作為類名,並單擊 Generate 按鈕,則將產生上面的代碼塊底部顯示的類。

CodeSmith 使用起來相當容易,如果能夠正確應用,則可以產生一些令人難以置信的結果。面向代碼產生的應用程式中最常見的部分之一是資料訪問層。CodeSmith 包括一個名為 SchemaExplorer 的特殊的程式集,可用來從表、預存程序或幾乎任何其他 SQL Server? 對象產生模板。

CodeSmith 由 Eric J. Smith 編寫,並且可以在 http://www.ericjsmith.net/codesmith 下載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.