Bootcamp süresi boyunca verilen ödevler Task1, Task2... şeklinde klasörlenerek bu repo içerisinde paylaşılacaktır.
Temel C# bilgileri verilmiştir (Değişkenler, şart blokları, döngüler, fonksiyonlar; class, interface kavramları). Katmanlı mimari ile abstraction, dependency injection gibi kavramların tanımları ve örnekleri bulunur. Bir dış SOAP servisin sisteme adapte edilmesi örneği yer alır.
- Projeler:
- Workaround: Kavramların ve temellerin anlatıldığı ve örneklendiği test alanı.
- Entities: Person entity'sinin bulunduğu katman.
- Business: İş kurallarının bulunduğu katman.
- Adapters: Mernis sisteminin adapter pattern'ı kullanılarak entegre edildiği katman.
C#'ın temel konuları console uygulamaları ve ek olarak genel özet için mini bir windows form recap uygulaması üzerinden anlatılmıştır. Her bir konu adıyla isimlendirilmiş bir proje altında işlenmiştir.
- Projeler
- TypesAndVariables: Tamamı değer tiplerden oluşan (string hariç -her ne kadar referans tipli olsa da özel durumundan dolayı değer tip gibi davranır-) sayısal, metinsel veri tipleri ve enum veri tipi örneklerle açıklanmıştır. Sayısal tiplerin değer aralıkları da yer alır.
- Conditionals: Şart blokları (if, else if, ternary operator, switch case yapıları) anlatılmıştır.
- Methods: Parametreli, parametresiz, değer döndüren, değer döndürmeyen methodlar açıklanmıştır. Overloading kavramı, ref, out keywordleri, params keywordü kullanımları ve default parametreli methodlar anlatılmıştır.
- Arrays: Diziler, çok boyutlu diziler, dizilere başlangıçta ve sonradan eleman ataması yapma ve döngüler ile ilişkilerinden bahsedilmiştir.
- Loops: For, foreach, while, do while döngü yapıları açıklanmıştır.
- Strings: Stringlerin bir char array'i olduğu örneklerle açıklanmıştır. Sıkça kullanılan stringler için arama ve manipülasyon methodları anlatılmıştır (Clone, EndsWith, StartsWith, IndexOf, LastIndexOf, Insert, Substring, ToLower, ToUpper, Replace, Remove, String.Format).
- Classes: Class yapılarının bir veri tutucu ve method tutucu olduğu, gruplayıcı olarak kullanılabildiği açıklanmıştır. En temelden syntax yapısı ile OOP'nin olmazsa olmazı class konusuna bir giriş yapılmıştır. Property ve field kavramları, propertylerin açık kullanımı ve neden var olduğu (encapsulation kavramı) örnek üstünden anlatılmıştır.
- RecapDemo1: WindowsForm projesi üstünden 8x8'lik bir dama tahtası simüle edilmiştir. Class, çoklu array, loop, conditional blok konularını barındıran bir örnek uygulama yapılmıştır.
- Interfaces: Interfacelerin genel syntax yapısı ve bir referans tip ve class tutucu olarak genel kullanım durumları örnekler üzerinden anlatılmıştır.
- InterfacesDemo: Konunun önemi açısından interfaceler için küçük bir demo yapılmıştır. Bir senaryo üzerinden yanlış kullanım ve ardından doğru kullanım uygulanarak (interface parçalanarak) SOLID prensiplerinin I'si interface segregation prensibi açıklanmıştır.
- Inheritance: Class'ların başka class'lardan miras alması ve interfacele syntax bakımından benzerlikleri, aralarındaki farklar, inheritance kısıtları, kuralları örnekler üzerinden açıklanmıştır.
OOP için temel konular anlatılmıştır. Genel konu başlıkları şöyledir: Referans tipler, constructor yapısı, interface ve gerçek hayat uygulamaları, generic yapılar, thread multithreading ve asenkron programlama mantığı, Language Integrated Query(LINQ) yapısı ve kullanımı.
- Projeler
- ReferenceTypes: Referans tiplerin gerçek hayat senaryolarında kullanılabilmesi için gerekli olan mantıksal tanımı örnekler üzerinden anlatılmıştır.
- Constructors: Default constructor ve custom constructor kavramları ve tanımları örneklerle açıklanmıştır.
- Interfaces: Interfacelerin syntax yapısının yanında neden kullanıma ihtiyaç duyulduğunun mantığı üzerine örnek senaryolar oluşturulmuş ve uygulanmıştır.
- Generics: Generic class'ların nasıl oluşturulduğu List yapısının benzeri bir MyList classı üzerinden anlatılmış, arrayler kullanılarak dinamik bir veri yapısının bir bölümü oluşturularak örneklenmiştir.
- ThreadingDemo1: Thread, multithread kavramları ve çalışma mantığı bir WindowsForms uygulaması üzerinden anlatılmıştır. Asenkron programlamanın tek bir thread üstünden olabileceği gibi birden fazla thread(multithread) üzerinden de gerçekleştirilebileceği açıklanmıştır.
- LinqProject: Veri tabanından liste formatında gelecek veriler simüle edilmiştir. Gelen bu verilerin nasıl filtreleneceği önce algoritmik olarak ardından linq kullanılarak örneklenmiş, bu esnada linqin delegateler üzerinden nasıl kullanılacağı açıklanmıştır.
-
Bu task n katmanlı mimari modeli kullanılarak yapıldı. Katmanlar Entity, DataAccess, Business class library projeleri ve Presentation katmanı olarak da WebApi projesidir.
-
Code first yaklaşımı ile entityframework core kullanılarak tablolar, karşılık gelen kolonlar Entity katmanında ve tablolar arası ilişkiler DataAccess katmanında belirlendi. DbContext'ten inherit edilen KodlamaioContext configürasyonları ve mapping işlemleri yapıldı. Migration oluşturuldu ve veri tabanı ayağa kaldırıldı. Tablolar arasında one to many ilişkisi bulunmaktadır. İlişkiler ve kolonlar aşağıdaki görselde mevcuttur.
- DataAccess katmanında abstract data access layer referansları ve entityframework core kullanıldığından Repository classları yazıldı.
- Business katmanında abstract servisler ve manager classları yazıldı. Method dönüşleri için result yapısı implemente edildi. Fluent validation implemente edildi. Magic string'ten kaçınmak için result ve fluent validation'dan dönen bilgi ve hata mesajları ayrı classlar içerisine toplandı. Dependency injection'ı tek bir yerden yönetebilmek adına IoC implemente edildi.
- Son olarak WebApi katmanına her bir tablo için controller'lar eklendi. Entity'lerimizi dışarı açmamak adına Entity katmanında Dto nesneleri oluşturuldu. Auto Mapper implementasyonu yapıldı. Otomatik binding map'leme işlemi için gerekli configürasyonlar MapProfile içerisinde oluşturuldu.
- Sistem şu an sorunsuz bir şekilde çalışıyor. Siz de repoyu clone'layarak test edebilir, kodları incleyebilirsiniz. Anlamadığınız bir hususda çekinmeden Github profilimdeki discord kullanıcı adım üzerinden bana ulaşabilirsiniz.
nArchitecture altyapısının bir demo proje üzerinden implemente süreçleri anlatılmıştır. nArchitecture mimarisi Hexagonal arc, Onion arc. gibi mimarilerin iyi yanlarının alınarak Domain Driven Design yaklaşımının uygulandığı, genel çatının CQRS pattern'ı üzerine kurulduğu bir mimaridir.
Demo projede bir araç kiralama sistemi üzerinden konular anlatılmış, implementasyonlar gerçekleştirilmiştir.
Kurs sürecindeki süreçler genel manada aşağıda maddeler halinde açıklanmıştır.
- Domain katmanında veri tabanındaki tablolara karşılık gelecek tablolar, Entities klasörü içerisinde farklı classlarla modellenmiştir.
- Persistence katmanında BaseDbContext ile tablo ve colon konfigürasyonları yapılmış ve mock datalar yazılmıştır.
- Her bir tablo için ayrı ayrı veri tabanı işlemlerinin yapıldığı repository'ler yazılmıştır.
- Application katmanında her bir tablo için Features dizini içerisinde Commands, Queries, Dtos, Models, Profiles ve Rules dizinleri oluşturulmuş ve klasör isimlendirilmelerindeki amaçlara hizmet eden yapılar tasarlanmıştır.
- WebAPI katmanında da swagger üzerinden yapılan işlemler test edilmiş ve sonuçları gözlemlenmiştir.




