Makale Özeti

CodeSmith "template" tabanlı bir kod oluşturucusudur.

Makale

CodeSmith ile Tanışma

Uygulama geliştiricilerin temel derdidir. Aynı kodu tekrar tekrar yazmak. Bu iş bir süre sonra gerçekten sıkıntı verici bir hal alır. Bazı "tembel yazılım geliştiriciler" sürekli tekrar ettikleri işleri yapan araçlar yazarlar. Mesela çok sık yaptığı bir class içindeki property leri datareader nesnesindeki değerlere eşitlemek için kullandığı "mapping" kodunu reflection ve sqldmo ile yapan bir öğrencim vardı. Ancak bu tarz çözümlerin bize istediğimiz esnekliği sağlaması için bu işe gerçekten çok fazla zaman harcanması gerekir yada her iş için küçük araçlar hazırlanır. Yada bu işi yapan kaliteli bir araç bulunur o kullanılır. Evet işaret etmekte olduğum araç : CodeSmith.

CodeSmith "template" tabanlı bir kod oluşturucusudur. CodeSmith ile aslında sadece kod oluşturulmaz. Hazırlanan template ile herhangi bir metin çıktı üretebilirsiniz.

CodeSmith'i nasıl temin edebilirim?
codesmithtools.com adresinden deneme sürümünü temin edebileceğiniz, CodeSmith'in lisanslama ücretlerini yine aynı site üzerinden öğrenebilirsiniz.

CodeSmith bir O/RM (Object Relational Mapping) aracı değildir.

CodeSmith in en çok kullanıldığı noktalardan bir tanesi veritabanınızın şemasını elde etmek ve bu şemaya göre stored procedure'ler, class'lar üretmektir. Ancak işlevi olarak O/RM araçlarına benzerlik göstersede CodeSmith bir O/RM aracı değildir. Sizin veritabanı ile bağlantılı olarak kod üretmenizi sağlayarak işinizi bir hayli kolaylaştırır.

Not: Object Relational Mapping konusundan ilerleyen makalelerde bahsetmek istiyorum. Ancak ne olduğunu kısaca söylemek gerekirse, nesnelerin ilişkisel veritabanı üzerindeki tablolarda saklanması için gerekli olan alt yapıyı sunan araçlardır. Örneğin; NHibernate, Llblgen gibi araçlar bu kategoride ençok bilinen ürünlerdir. O/RM araçları sayesinde object oriented ortam ile muhatap olup tamamen object oriented düşünür, nesneler ile çalışırsınız.Nesneleri veritabanında saklamak (persistence) etmek ilgili aracın sağladığı alt yapının işidir.

CodeSmith ana ekranı

İlk Templatemizi Oluşturalım

CodeSmith Studio'yu açıp, yeni bir template dosyası oluşturalım

<%@CodeTemplate Language="C#" %>
İlk CodeSmith Template örneği
<%
for (int i=1;i<=10;i++)
{
Response.WriteLine(i.ToString());
}
%>
İlk CodeSmith Template örneği

Yukarıdaki CodeSmith template çıktısı "İlk CodeSmith Template örneği" şeklindeki sabit metinler arasında 1'den 10'a kadar olan sayıları listeleyecektir.

İlk dikkati çeken şey template yazım kuralları ASP ye çok benzemektedir. Bu sayede template oluştururken alışık olduğumuz bir yapı ile çalışırız. Ayrıca resimde gözüktüğü gibi CodeSmith Studio, Visual Studio'da olduğu gibi intellisense desteğine sahiptir. Bu özellik ile bir çok daha hızlı biçimde templateler oluşturabilirsiniz.

Template'in çıktısını elde edebilmek için F5 ile çalıştırmanız yeterlidir. (Templatei çalıştırıp çıktısını bir dosyaya yazmak için neler yapmak gereklidir konusundan ilerleyen makalelerde bahsedeceğim.)

 

Template'e Parametre Eklemek

Template'lerimiz çalışma anında parametrik olarak değerler alabilirler. Örneğin az önce yaptığımız basit örnekteki 10 değerini template'i çalıştırmadan önce parametre olarak vermek istersek.

<%@CodeTemplate Language="C#" %>
<%@ Property Name="MaxValue" Type="Int32" Default="10" Optional="False" Category="Genel Özellikler" %>
İlk CodeSmith Template örneği
<%
for (int i=1;i<=MaxValue;i++)
{
Response.WriteLine(i.ToString());
}
%>
İlk CodeSmith Template örneği

Yukarıdaki örnekte templatein parametrik değer alabilmesi için bir property tanımladık.

Property tanımlaması yapabilmek için templatein üst tarafında @Property tanımalmasını eklemek gerekmektedir. Name ile property'nin adını, type ile veri türünü, default ile varsayılan değerini belirleriz.

Not: Makale ile API Reference oluşturmak amaçlanmamıştır. CodeSmit API Reference'a help menüsünden ulaşabilirsiniz. Yeterli dokumantasyona sahip.

CodeSmith i tanımak ve temel mantığını öğrenmeyi amaçladığımız bu makalenin sonuna geldik. CodeSmith ile alakalı makalelerimim devam edecek.

Cengiz HAN
cengiz@cengizhan.com
Microsoft ASP.NET Most Valuable Professional
MCSD.NET, MCT