Data - Veri Erişim Katmanı
Açıklama
Bu belge veri erişim katmanı işlemlerini tanımlar. Veri erişim katmanı Veritabanı, Servis ve diğer veri kaynaklarına erişim için kullanılan katmandır.Bu katmanda:
İş mantığı bulunmaz. (Sadece veri alma-verme işlemleri yapılır.)
Veri istemcileri arayüzler üzerinden çalışır ve birim testleri oluşturulur.
Veritabanı Erişimi
Repository metotları
Repository metotları temel olarak aşağıdaki adımlardan oluşur:
İstek bilgilerinin oluşturulması
Varsayılan dönüş değerinin tanımlanması
Veritabanı isteğinin yapılması ve sonucun döndürülmesi
Örnek:
public bool UpdatePost(int postId, int memberId)
{
var dataRequest = dataRequestFactory.UpdatePost(postId, memberId);
var defaultReturnValue = false;
return dataClient.GetScalar<bool>(dataRequest, defaultReturnValue);
}
DataRequest
Veritabanı işlemi istek bilgileri IDataRequestFactory
aracılığıyla oluşturulur. Bu sınıfta istek bilgilerini içeren özel bir metot oluşturulur.
Dikkat edilecek konular:
Metot, çağrılacak prosedür ile aynı isme sahip olur.
Prosedür isimleri
ProcedureNames
sınıfında özellik olarak tanımlanır.Parametre isimleri
ParameterNames
sınıfında özellik olarak tanımlanır.
Vertabanı isteği oluşturma örneği:
public DataRequest UpdatePost(int postId, int memberId)
{
string procedureName = ProcedureNames.UpdatePost;
var parameters = new DynamicParameters();
parameters.Add(ParameterNames.PostId, postId);
parameters.Add(ParameterNames.MemberId, memberId);
return new DapperDataRequest
{
ProcedureName = procedureName,
Parameters = parameters
};
}
OUTPUT tipinde parametre kullanan bir örnek:
public int AddPost(Post post)
{
var dataRequest = dataRequestFactory.AddPost(post);
var defaultReturnValue = false;
bool isSuccess = dataClient.GetScalar<bool>(dataRequest, defaultReturnValue);
if (!isSuccess)
{
return 0;
}
return dataRequest.Parameters.Get<int>(ParameterNames.PostId);
}
Bu metot için veri isteği aşağıdaki gibi oluşturulur:
public DataRequest AddPost(Post post)
{
string procedureName = ProcedureNames.AddPost;
var parameters = new DynamicParameters();
parameters.Add(ParameterNames.PostSecureId, post.PostSecureId);
parameters.Add(ParameterNames.MemberId, post.MemberId);
parameters.Add(ParameterNames.PostTypeId, post.PostType.ToInt32());
parameters.Add(ParameterNames.PostId, 0, DbType.Int32, ParameterDirection.Output, sizeof(int));
return new DapperDataRequest
{
ProcedureName = procedureName,
Parameters = parameters
};
}
SplitOn içeren veri isteği örneği:
Sorgu sonucu dönen alanlar belli nesnelere göre gruplanarak alt sınıflar doldurulacaksa, ilgili nesnenin alanlarını döndüren alanlar belirtilir.
public DataRequest GetProfileInfo(int memberId)
{
string procedureName = ProcedureNames.GetProfileInfo;
var parameters = new DynamicParameters();
parameters.Add(ParameterNames.MemberId, memberId);
return new DapperDataRequest
{
ProcedureName = procedureName,
Parameters = parameters,
SplitOnParameters = GetSplitOnParameters(ColumnNames.OccupationId, ColumnNames.EducationId)
};
}
string GetSplitOnParameters(params string[] fieldNames)
{
return string.Join(",", fieldNames);
}
Bu istek bilgilerini kullanan repository metodu aşağıda gösterilmiştir. GetItem
metodu çağrılırken belirtilen ilk 3 tip (ProfileInfo, Occupation, Education
) sorgunun ayrılacağı parçaları, son tip (ProfileInfo
) dönüş tipini belirler.
public ProfileInfo GetProfileInfo(int memberId)
{
var dataRequest = dataRequestFactory.GetProfileInfo(memberId);
ProfileInfo defaultValue = null;
return dataClient.GetItem<ProfileInfo, Occupation, Education, ProfileInfo>(
dataRequest,
(profileInfo, occupation, education) =>
{
profileInfo.Education = education;
profileInfo.Occupation = occupation;
return profileInfo;
},
dataRequest.SplitOnParameters,
defaultValue);
}
Varsayılan değerler
Veritabanı isteği başarısız olursa ya da döndürülecek bir kayıt bulunamazsa hangi sonucun döndürüleceği Repository metodunda yapılan çağrıda belirtilir.
bool
tipinde dönüş değeri için varsayılan:
var defaultReturnValue = false;
int
ve sayısal dönüş değerleri için varsayılan:
var defaultReturnValue = 0;
string
tipinde dönüş değeri için varsayılan:
string defaultReturnValue = null;
Sınıf tipinde dönüş değerleri için varsayılan:
Post defaultReturnValue = null;
Özel durum için dönüş tipleri IDefaultValueFactory
sınıfında tanımlanır.
public PasswordActivation CreateDefaultPasswordActivation()
{
return new PasswordActivation { IsActive = false };
}
Liste dönüş tipleri için varsayılan olarak boş liste döndürülür:
var defaultValue = new List<Member>();
Servis Erişimi
Servislere erişen Repository metotları temel olarak aşağıdaki adımlardan oluşur:
İstek bilgilerinin oluşturulması
İstek sonucunun uygun tipe çevrilmesi ve döndürülmesi
Hata kontrolü
Veritabanı istemcisi yerine Api istemcisi kullanılır. Diğer yönleriyle Veritabanı erişimi gibi tasarlanır ve kullanılır.
Last updated
Was this helpful?