Google da ara

 

Eylül 2010
Pts Sal Çar Per Cum Cts Paz
« Ağu    
 12345
6789101112
13141516171819
20212223242526
27282930  

Google Reklamları

Dil Seçimi

Bağış yada Ödeme

Sayfa 5 / 12« İlk...«34567»...Son »

#region kullanımı

#region kodların daha okunabilir bloklar haline getirilmesi amacıyla kullanılan bir keyword dur. Bir class yazdınız ve bu class içerisinde private field lar ve public propertyleriniz var ayrıca static methodlarda yine mevcut bunlardan her bir grubu mantıksal olarak gruplamak amacıyla #region ları kullanırız. Bu keywordler derleme anında dikkate alınmazken, geliştirme aşamasında takım arkadaşlarınıza ve size büyük kolaylık sağlar. Ayrıca Visual studio tarafında en büyük kolaylıklarından bir tanesi yanında bir (-) işareti çıkartması ve bunu collapse (daraltmak) edebilmeniz.

Örnek kullanım:

public class Kitap:IKoseliDeneme
{
#region Fields
private int _TestField = 0;
private bool _IsTestClass = true;
private string _BlogAddress = "www.yilmazyavuz.com";
#endregion Fields

#region Properties
public bool IsThisAProperty { get; set; }
public int TestProperty { get; set; }
#endregion Properties

public string this[int sayfaNo]
{
get
{
return (sayfaNo * 2).ToString();
}
set
{
//bişeyler oluyor
}
}

#region Constructors
public Kitap()
{

}
public Kitap(int sayfaSayisi)
{
//bişeyler oluyor
}
#endregion Constructors
}

Visual Studio da Collapse edilmiş hali:
regionornek

#endregion dan sonra tanımı tekrar yazmanız gerekli değildir. Ancak kullanım kolaylığı açısından binlerce satır içeren bir region ın sonunu daha kolay bulabilmek açısından önemlidir.
Visual Studio üzerindeki snippet ı region dır.

Csharp – Interface kullanıma örnek

Kitap adında bir class ımız olsun ve üzerinde integer değer alan ve geri dönüş değeri string olan bir indexer ımız bulunsun.

Kitap dan türettiğimiz BilgisayarKitabi class ımız üzerindede aynı şekilde bir indexer bulunsun aynı şekilde EdebiyatKitabi vs. bir çok Kitap classından türeyen classlarımız olsun ve hepsinde de aynı imzalı ve geri dönüş değerine sahip indexerlar bulunsun.

Şimdi böyle bir senaryoda bize Kitap dan türeyen bir class ın örneği olduğuna emin olduğumuz bir nesne gelsin, ve bu nesne üzerindeki indexer dan gerekli bilgiyi almamız gerektiğini düşünelim.

Şu şekilde yaparsak işimiz çözülüyor gibi:

void KitapIsle(Kitap ktp)

{

MessageBox.Show(ktp[1]);

}

Ancak burada ulaştığımız indexer Kitap classında tanımlı olan indexer bize ise gelen nesnenin kendi classında bulunan indexer lazım çünkü ikisi birbirinden farklı işlemler yapıyorlar. Böyle bir durumda yapılabilecek şeylerden birisi Interface kullanmak ve gelen nesneyi Interface e cast etmek yani:

interface IKoseliDeneme

{

string this[int sayfaNo]

{

get;

set;

}

}

Şeklinde bir interface imiz olduğunu düşünürsek :

void KitapIsle(Kitap ktp)

{

IKoseliDeneme kitabim = (IKoseliDeneme)ktp;

MessageBox.Show(kitabim[1]);

}

Şeklinde yazdığımızda interface her iki class Kitap,EdebiyatKitabi ında implement edilmiş olsa dahi kitabim dan ulaştığımız indexer nesnenin asıl Classındaki indexer olacaktır.

Sql Server – Detach

detach1

Detach Sql server üzerinde kullanmadığımız veritabanlarını kaynak tüketimini azaltmak adına silmeden, mdf ve ldf dosyalarını korumak kaydıyla Sql Server üzerinden kopartmak için kullanılır.
Sql Management Studio ile bu işlemi :
Database üzerinde sağ tıklayıp, Tasks kısmından Detach… a tıklayarak yapabiliriz.
Burda db üzerine bağlı connection ları da kopartmak için gelen ekrandaki Drop Connections kısmını işaretleyebiliriz.

Nettiers – Custom Stored Procedure bastırmadan kullanma

Normalde Nettiers yazdığınız custom stored procedure leri kendi formatında yazdığınızda ilgili tablonun Provider ına eklemektedir. Ancak bir şekilde katman basılamıyor ise yada bastırmak istemiyorsanız. Yazdığınız procedureleri yine kullanabilirsiniz. Bunun için aşağıdaki gibi tabloProviderBase üzerinde bulunan Fill(..) methodunu ve DataRepository.Provider.ExecuteReader(..) methodunu birlikte kullanarak TList şeklinde bir sonuç elde edebilirsiniz.

YilmazYavuzCom.Data.Bases.YazilarProviderBase.Fill(
DataRepository.Provider.ExecuteReader(CommandType.StoredProcedure, "spDistictYazilar")
,new TList<Yazilar>(),0,1000);

Fill methodunda ilk parametre IDataReader tipinde ve bunu elde etmek için ExecuteReader(..) methodundan faydalanıyoruz. bu method bize istediğimiz procedure u çalıştırarak sonucu IDataReader tipinden döndürüyor.

İkinci parametre IDataReader dan aldığı değerleri ekleyeceği collection ı istemekte. Ben burda yeni bir collection oluşturup gönderiyorum.

Üçüncü parametre Reader üzerindeki kaçıncı elemandan eklemeye başlayacağını belirtiyor.

Dördüncü ise en son kaçıncı elemana kadar okuyacağını belirtiyor.

Methodun geri dönüş değeri ise TList<Yazilar> tipinde ve bizim gönderdiğimiz collection ı bize geri döndürüyor.

Nettiers – DeepLoad

Nettiers ile db den getirdiğiniz bir nesne örneği üzerinde ilk olarak sadece örneğin db deki tablosunda bulunan değerleri gelmektedir. Üzerinde BagliOlanTabloCollection yada KolonIdSource şeklinde propertyler normalde null ve sıfır elemanlı collection olarak gelmektedir.. Bunları doldurabilmek için DeepLoad(…) methodu ile ilgili nesneye deepload çekmemiz gerekmektedir. Bu işlem sadece veritabanından getirilmiş nesne örnekleri üzerinde çalışmaktadır. Yani yeni oluşturup id lerini doldurduğunuz bir nesneye deepload çekmeye çalıştığınızda Idsource lar dolmayacaktır.
Ayrıca kullanımı DeepSave den farklı olarak bir level sınırı olmayıp birden fazla alt alta bağlılıkları doldurabilmektedir.
Yani
Sayfa üzerinde KitapIdSource olsun Kitap nesnesi üzerindede RafIdSource olsun Raf üzerinde de KütüphaneIdSource.
Bunların hepsini tek bir DeepSave de kaydedemez iken tek bir DeepLoad ile doldurabiliriz.

Şu şekilde:

DataRepository.SayfaProvider.DeepLoad(sayfam,true);

Nettiers – Unable to use this part of the where clause in this version of Find:

Bu hatayı çok sık olmamakla beraber şu şekilde alabiliriz :
Katman bastırılırken windows un culture ı diyelimki İngilizce olsun, sonra katmanı kullanan bir yazılım diyelimki Turkce bir culture da çalışsın. Böyle bir durumda ; nettiers olası case sensitive lik sorununu çözebilmek adına Find(…) methoduna aldığı whereclause u ToLower() yaptığı için; bastırdığı zamanki ToLower() büyük I ları küçük i ye çevirirken çalışma anındaki ToLower() Türkçe culture olduğu için büyük I ları küçük ı ya çevirecektir. böylece aslında bizim yıllardır çalışan katmanımız , bir şekilde katman basılan makinedeki culture değişikliğinden dolayı proje patlaklar vermeye başlayacaktır.
Çözüm basittir çalışma ortamındaki culture ile katmanın basıldığı makinedeki culture ı herzaman için aynı tutmak.

Not: Windows forms projelerimizde Culture kullanıcının ayarlarından otomatik olarak alınmaktadır. Buda bizim işimizi zaman zaman bozabilir. Bunu önlemek adına programın main bloğuna aşağıdaki kodu ekleyerek projemizin çalışma anındaki culture ı kendimiz sabit bir değer olarak belirleyebiliriz.

            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("tr-TR");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("tr-TR");

Nettiers – Özelleştirme

Nettiers bastırdığı kodlar için size özelleştirme imkanı sunan bir templatedir.
Bastırılan her class ın kendi dosyası size bırakılmış bir superclass’dır. Ve içerisinde default contructor haricinde herhangi bir kod bulunmaz. Bu dosyalar Nettiers tarafından sadece bir kere basılır ve tekrar bastırdığınızda bu dosyalar eğer var ise overwrite yapılmaz.
Böylece siz bir entity class ı üzerinde yaptığınız değişiklikler db üzerinde bir değişiklik olup katman tekrar basıldığında korunmuş olur. Bu Tüm basılan kodlar için geçerlidir. EntityBase class ı dahil.
Windows forms projelerinden aşina olduğumuz şekilde nettiers projeler içerisinde bunları gruplandırır. Yani TabloAdi.cs tek bir dosya gibi görünürken yanında bulunan artıya tıkladığımızda TabloAdi.Generated.cs ve ITabloAdi.cs dosyalarıda altında görünür.
Nettiers ın bu özelliği ile Visual Studio ile bastırılan LINQ to Sql Classes dan çok daha kolay bir kullanıma sahiptir.
Ancak Bilmeniz gerekir ki bu tabloAdi class ların dışında bir class eklemeniz gerektiğinde yani Add New Item ile eklediğiniz bir dosya katman tekrar basıldığında nettiers tarafından algılanmayacak, katman basılma işlemi sonrasında Include In Project demeniz gerekecektir.

VmWare – Faild to lock file hatası

Sürekli kullandığım bir vmware sanal makinem dün gece üzerinde çalışan bilgisayarın resetlenmesi sonucunda haliyle kapanmıştı, bugün tekrar açmaya çalıştığımda bu hatayı aldığımı gördüm. Ufak bir google araştırmasıyla sonu lck ile biten klasörleri sildiğimde düzeleceğini keşfettim ve olmuştu.

kaynak

TFS – Workspace

Workspace adındanda malumunuz çalışma ortamı anlamına gelir. TFS ile çalışırken Server tarafında tek olan dosya yada klasörler clientlarda çalıştırılabilmek için bir çalışma ortamı isterler. Genelde ilk projeyi getlatest dediğinizde size nerelere koyayım bunca dosyayı diyerekten sorar işte bu workspacedir.
Ancak sonraları siz çalışma ortamınız kirlendiğinde yeni bir çalışma ortamı oluşturmak isteyebilirsiniz. Bunun için Team Explorer üzerindeki Source control üzerine çift tıklayıp Source Control penceresine erişelim. Sonra üst kısımda bulunan “Workspace:” yazan yerden Manage workspace seçelim. Gelen ekranda yeni workspaceler ekleyebilir eskilerini düzenleyebilirsiniz.

Kullanım alanı için örnek olması açısından:
Bir workspace de çalışırken Tfs command prompt dan yanlış birşeyler yaptım ve geride alamadım Bir klasör ne kadar uğraştıysam source control üzerinden erişilemez hale geldi. sonuç olarak yeni bir workspace oluşturarak diğer workspace imden dosyalarımı check-in ledim ve yenisinde get latest dedim. Ve çalışmama kaldığım yerden tam hız devam edebildim.

Redgate Reflector – .Net Yazılımcısının korkulu rüyası

screenshot_full_screen

.Net bildiğiniz gibi yazdığımız kodları ara bir dile çevirerek framework tarafından bu dil ile anlaşmakta ve makine diline çalışma anında çevrilmektedir. Bu çok dilli ve platform bağımsız (!) olması için geliştirilmiş bir mimari olsada, çok kolay tersine mühendislik yapılabilmesine de imkan sağlamakta.
Kısaca özetlemek gerekirse; .Net platformunda yazdığınız bir proje : windows app. ,class library, yada derlenmiş asp.net sitesi olsun. Reflector kullanılarak çok kolay bir şekilde kodları geri getirilebiliyor. Bunu herhangi bir .net programını hacklemek yada kodlarını çalıp yeni bir proje geliştirmek için kullanabileceğimiz gibi, source code unu kaybettiğimiz bir projeyi exe yada dll halinden geri getirebilmemizide sağlıyor.
Reflector kullanımı çok basit kurulum gerektirmeden direk çalıştırılabilen bir yazılım. Redgate firması tarafından ilk sahibi olan Ruts Loeder den satın alınmış ve ücretsiz olarak sunulmaktadır.
Şu adres üzerinden ulaşabilirsiniz.
Ayrıca program tek başına sadece size kodları istediğiniz .Net diline çevirirken eklentileriyle birlikte, kodları derlenebilecek Visual Studio projeleri halinede kolaylıkla getirebiliyorsunuz.

Sayfa 5 / 12« İlk...«34567»...Son »