CRUD-Framework · WCF ile Kullanıcı ve Proje CRUD Servisleri
EDMX tabanlı Entity Framework, servis arayüzleri, generic repository ve Unit of Work ile kullanıcı/proje ilişkilerini ele alan klasik .NET çalışması.
CRUD-Framework, .NET Framework 4.7.2 üzerinde yazılmış bir WCF servis örneği. Kullanıcı, proje ve projeyle kullanıcıyı ilişkilendiren rol kayıtları için temel işlemleri ayrı servis sözleşmelerine dağıtıyor. Veri erişiminde Entity Framework 6 ve MySQL kullanılıyor. Projenin kaynak kodu, bir HTTP çağrısının WCF sözleşmesinden veritabanı kaydına kadar izlediği yolu gösteriyor.
Servis sözleşmesinden HTTP isteğine
IUserService ve IProjectService, [ServiceContract] ile servis arayüzü olarak tanımlanıyor. Her işlemde [OperationContract] ve WebInvoke, çağrının kullanacağı HTTP metodunu, URI şablonunu ve ileti biçimini belirliyor. Kullanıcı okuma işlemi, örneğin GetUser?userid={userid} şablonuyla bir GET isteği alıyor. Ekleme, güncelleme ve silme için ayrı POST, PUT ve DELETE işlemleri bulunuyor.
UserService.svc ve ProjectService.svc dosyaları, ilgili servis sınıflarının giriş noktaları. Web.config içinde bu servisler için webHttpBinding ve basicHttpBinding yapılandırılmış. Web işlemlerinde sözleşmeler çoğunlukla JSON kullanıyor. DelProjectRole ise istek biçimi olarak XML, yanıt biçimi olarak JSON tanımlayan bir örnek. İstemcinin hangi biçimde veri göndereceği, işlem bazında servis arayüzünden okunabiliyor.
Bir projedeki kullanıcıları listelemek
Bir ekip ekranında, önce AddProject ile proje ve AddUser ile kullanıcı oluşturulduğunu düşünelim. AddProjectRole, DTO’daki kullanıcı ve proje kimliklerini projectrole varlığına aktararak ilişkiyi kaydediyor. GetProjectRoles çağrısı, verilen proje kimliğiyle ilişkileri filtreliyor ve proje, kullanıcı ve rol tablolarını birleştiriyor. Sonuçtaki ProjectRoleDto, ilişki kimliğiyle birlikte proje adını, kullanıcı adını ve iki kaydın kimliğini taşıyor. Böylece ekran, kullanıcı adını göstermek için her satırda ayrıca kullanıcı servisini çağırmadan listeyi oluşturabilir.
EDMX modeli ve verinin kaydedilmesi
Data projesindeki EDMX modeli, MySQL tablolarıyla EF6 varlıkları arasındaki eşlemeyi tanımlıyor. Modelden üretilen dataEntities bağlamı project, projectrole ve user tiplerini açıyor. Servisler çoğu kayıt işleminde UnitOfWorkPattern üzerinden ilgili RepositoryPattern<T> örneğini alıyor. Repository nesnenin eklenmesini, değiştirilmesini ya da silinmesini bağlama bildiriyor. Save çağrısı değişiklikleri veritabanına yazıyor ve using bloğu sona erdiğinde UnitOfWorkPattern kendi bağlamını kapatıyor.
DTO ile veritabanı varlığının ayrımı servis kodunda açıkça görülebiliyor. GetUser, EDMX modelinden gelen kullanıcı varlığını kimlik, ad ve kullanıcı adı içeren bir UserDto nesnesine dönüştürüyor. SetProject ise DTO’daki proje adını mevcut varlığa uyguluyor ve sonucu metinle bildiriyor. Sözleşme, DTO ve veri modelini peş peşe okumak, dışarıdan görülen alanlarla veritabanı eşlemesinin hangi noktada ayrıldığını gösteriyor.