Makale Özeti

Bu makalemde sizlerle beraber Visual Studio.Net 2005 ile gelen yeni bir özellik olan Code Snippet'lar hakkında örnekler yaparak kullanılabilirliğinin işlerimizi esasında ne kadar kolaylaştırabileceğini inceleyeceğiz

Makale

         Merhabalar,

         Bu makalemde sizlerle beraber Visual Studio.Net 2005 ile gelen yeni bir özellik olan Code Snippet'lar hakkında örnekler yaparak kullanılabilirliğinin işlerimizi esasında ne kadar kolaylaştırabileceğini inceleyeceğiz.

         Eminimki birçoğunuzun ilk önce cevabını istediği soru Code Snippet'in ne olduğudur. Bunun için Yazgeliştir editörlerinden Cenk Çağlar'ın bu konu hakkındaki makalesini okumanızı önereceğim. Makaleye ulaşmak için tıklayınız. Bu makalede yapacağımız tüm örnekler için sözü geçen makaledeki bilgileri kullanıyor olacağız. İşe ilk önce bir snippet dosyamızın hangi kısımlardan oluştuğunu çok önemli bir konu olduğu için tekrardan açıklayarak başlayalım.

         Snippet dosyamız XML yapısında bir dosyadır ve iki temel elemandan oluşur bunlar <Header> ve <Snippet> elemanlarıdır. Burada <Header> elamanı bizim snippetimiz için temel bilgileri taşırken snippetimizde parametre olarak bulunacak isimleri, ve snippet kodumuzu <Snippet> elemanı içinde yazacağız. Şimdi ise temel bir Snippet dosyası yapısını inceleyelim.
 

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0">
          <Header>
                   <
Title>Snippetimizin Basligi</Title>
                   <Shortcut>Hangi metin yazildiginda cikacagi</Shortcut>
                   <Description>Aciklamasi</Description>
                   <Author>Yazari</Author>
                   <SnippetTypes>
                             <
SnippetType>Tipi</SnippetType>
                   </SnippetTypes>
          </
Header>
          <
Snippet>
                   <
Declarations>
                             <
Literal>
                                      <
ID>Degiskenimizin Adi</ID>
                                      <ToolTip>Degiskenimizin tooltip'inde cikacak text</ToolTip>
                                      <Default>Degiskenimizin Default degeri</Default>
                             </Literal>
                   </
Declarations>
                   <
Code Language="csharp" Format="CData">
                   <![CDATA[Kodumuzu Buraya Yazacagiz]]>
                   </Code>
          </
Snippet>
</
CodeSnippet>

         Kullanacağımız temel snippet dosyasının yapısı budur. Bu kısımda kod üzerinde gerekli açıklamalar yapıldığından burada tekrardan açıklamaya gerek duymuyorum. Ancak burada açıklanması gereken önemli bir konu yazmış olduğumuz Snippet'ların Visual Studio ya nasıl entegre edileceğidir. Bunun için Visual Studio'nun Tools Menüsünden Code Snippets Manager'ı açarak Snippet dosyamızı seçmek suretiyle Import edebiliriz.



         Şimdi ilk snippet örneğimizi yazalım. Bu örnekte bir entity kodlarken sık sık kullandığımız private bir değişken (Field) ve bunu encapsule eden bir property'i yazacağız snippet'imizin Adı ise EntityColumn olsun.
 

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0">
          <Header>
                   <
Title>Entity Column</Title>
                   <Shortcut>EntityColumn</Shortcut>
                   <Description>Bir private degisken ve bunu encapsule eden property olusturur.</Description>
                   <Author>Tamer Oz</Author>
                   <SnippetTypes>
                             <
SnippetType>Expansion</SnippetType>
                   </SnippetTypes>
          </
Header>
          <
Snippet>
                   <
Declarations>
                            <
Literal>
                                <
ID>variableType</ID>
                                <ToolTip>Degisken Tipimiz</ToolTip>
                                <Default>string</Default>
                            </Literal>
                            <
Literal>
                                <
ID>variableName</ID>
                                <ToolTip>Degisken Ismimiz</ToolTip>
                                <Default>ColumnName</Default>
                            </Literal>
                   </
Declarations>
                   <
Code Language="csharp" Format="CData">
                   <![CDATA[
                                    private $variableType$ m$variableName$;
                                    public $variableType$ $variableName$
                                    {
                                          get {return m$variableName$;}
                                          set {m$variableName$ = value;}
                                    }
                              ]]>
                   </Code>
          </
Snippet>
</
CodeSnippet>

          BU Snippet sayesinde bahsettiğim gibi Entity nesnelerimizi çok kolay oluşturabileceğiz bunun yanısıra diğer Class veya Bileşen dosyalarımıza yazmamız gerekn propertyleri çok büyük bir kolaylıkla yazabiliyor olacağız. İsterseniz bu snippet'in oluşturmuş olduğu kod bloguna bir bakalım.


          Burada yeşil ile işaretlenmiş olan kısımlar parametriktir ve değiştirildiğinde tüm snippet cloğunda değişecektir.

          Şimdi ise çok katmanlı mimaride program geliştirdiğimizi ve Controller katmanından Business katmanımızı çağırdığımız bir metodumuzun snippet ile nasıl yaratılabileceğini inceleyelim. Oluşturacağımız bu Snippet'imizin adı ise ControllerMethod olsun.

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0">
          <Header>
                   <
Title>Controller Method</Title>
                   <Shortcut>ControllerMethod</Shortcut>
                   <Description>Controller katmanindan Business katmanini Cagiran Kod</Description>
                   <Author>Tamer Oz</Author>
                   <SnippetTypes>
                             <
SnippetType>Expansion</SnippetType>
                   </SnippetTypes>
          </
Header>
          <
Snippet>
                   <
Declarations>
                            <
Literal>
                                <
ID>returnValue</ID>
                                <ToolTip>Metodun Geriye Donus Degeri</ToolTip>
                                <Default>DataTable</Default>
                            </Literal>
                            <
Literal>
                                <
ID>methodName</ID>
                                <ToolTip>Metodumuzun Adi</ToolTip>
                                <Default>KayitlariGetir</Default>
                            </Literal>
                            <
Literal>
                                 <
ID>businessLayerPrefix</ID>
                                 <ToolTip>Business Katmanimizin On Eki</ToolTip>
                                 <Default>bus</Default>
                            </Literal>
                            <
Literal>
                                 <
ID>businessLayerClassName</ID>
                                 <ToolTip>Business Katmanimizin classi</ToolTip>
                                 <Default>Kayitlar</Default>
                            </Literal>
                   </
Declarations>
                   <
Code Language="csharp" Format="CData">
                   <![CDATA[
                                    public $returnValue$ $methodName$()
                                    {
                                          $businessLayerPrefix$$businessLayerClassName$ ins$businessLayerPrefix$$businessLayerClassName$ = new $businessLayerPrefix$$businessLayerClassName$();
                                          return ins$businessLayerPrefix$$businessLayerClassName$.$methodName$();
                                    }
                              ]]>
                   </Code>
          </
Snippet>
</
CodeSnippet>

          Yazmış olduğumuz snippet'imize ait kod aşağıda bulunmaktadır.


          Şimdi ise try Catch ve Finally bloguna sahip ve Catch ile Finally bloğunda özelleştrilmiş işlemler yapan bir snippet yazalım. İsmi ise TryCatchFinally olsun.

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0">
          <Header>
                   <
Title>Try Carch Finally Blogu</Title>
                   <Shortcut>TryCatchFinally</Shortcut>
                   <Description>Try  Catch Finally Blogunu Olusturur</Description>
                   <Author>Tamer Oz</Author>
                   <SnippetTypes>
                             <
SnippetType>Expansion</SnippetType>
                   </SnippetTypes>
          </
Header>
          <
Snippet>
                   <
Declarations>
                            <
Literal>
                                <
ID>exceptionType</ID>
                                <ToolTip>Exception Tipi</ToolTip>
                                <Default>Exception</Default>
                            </Literal>
                            <
Literal>
                                <
ID>exceptionParameter</ID>
                                <ToolTip>Exception Tipinin Parametre Adi</ToolTip>
                                <Default>ex</Default>
                            </Literal>
                   </
Declarations>
                   <
Code Language="csharp" Format="CData">
                   <![CDATA[
                                    try
                                    {
 
                                    }
                                    catch ($exceptionType$ $exceptionParameter$)
                                    {
                                          this.ExceptionKaydet($exceptionParameter$.Message);
                                    }
                                    finally
                                    {
                                          //Finally Blogu
                                    }
                              ]]>
                   </Code>
          </
Snippet>
</
CodeSnippet>

          Oluşturduğumuz bu snippet ta hatamızı yakalayıp hatamızı sql'e veya eventloga kaydeden metodumuzu çağırıyoruz ve daha sonra finally kodunu yazıyoruz.


         Bu makalede kendi snippetimizi nasıl yazacağımız üzerine 3 tane başarılı örnek yapık. Sizlerde kodlama standartlarınıza ve mimarinize göre doğan ihtiyaçlarınızın çabuk karşılanması ve kod hammallığının azaltılması ve kodlama süresinin düşürülmesi için snppet'ları aktif olarak kullanabilirsiniz.

oztamer@hotmail.com
tamer.oz@yazgelistir.com
oztamer@hotmail.com