# Microsoft .NET CORE 3.x ile Katmanlı Mimari Tasarımı

Temiz anlatımlarıyla Engin Demiroğ kurslarını takip etmeniz faydanıza olacaktır.

{% embed url="<https://www.udemy.com/user/engindemiro/>" %}

{% embed url="<https://www.udemy.com/course/c-sharp-kursu/>" %}

{% embed url="<https://www.udemy.com/course/net-core-c-sharp-kursu/>" %}

{% embed url="<https://www.udemy.com/course/net-core-c-sharp-kursu-2/>" %}

{% embed url="<https://www.udemy.com/course/net-core-csharp-kursu/>" %}

{% embed url="<https://www.udemy.com/course/net-core-csharp-kursu-4/>" %}

Aynı eğitimlerin çok eski versiyonları içeren halini aşağıdaki youtube kanalında bulabilirsiniz. Mantık aynı olduğundan buradan da izleyebilirsiniz. Ayrıca, sıklıkla indirimler uygulandığından yukarıdaki her bir kursu 25 TL ücretle alabilirsiniz.

{% embed url="<https://www.youtube.com/channel/UCRjiquPh4mjPNoOV9eCilXQ>" %}

Alttaki linkde de .NET Framework ile yapılmış halini bulabilirsiniz.&#x20;

{% embed url="<https://github.com/mebaysan/Northwind.NLayeredApp-CSharp>" %}

Benzeri mimari ve anlatım sırasını takip eden Ziya Sert de youtube üzerinden takip edilebilir.

{% embed url="<https://www.youtube.com/watch?v=W3TjG6dNjjU&list=PLJG8Z8kMQegTnQ236w_LPL3Wr0ak9eYxa>" %}

## Örnek Proje

Projedeki&#x20;

* **DataLayer** (Entities)
* **DataAccessLayer**
* **BusinessLayer**
* **Core**&#x20;

projelerini .NET Standard class library ile oluşturmayı tercih ederek tüm platformlara uygun kütüphane çıkarabilirsiniz.

**PresentationLayer** (WebAPI) için WebAPI projesi seçerek hem **Windows** hem de **Linux** platformlarına uygun proje geliştirmeye başlayabilirsiniz.

![](/files/-M32QHQixaIwoURDd9fU)

Yukarıdaki eğitim sonunda gibi DL ve DAL katmanlarınız aşağıdaki gibi olacaktır. Business katmanınız iki tane interface bilecektir. Geri kalanı hakkında hiç bir bilgisi olması gerekmemektedir.

IProductDal, ICategoryDal  interface leri aynı metotlara ihtiyaç duyduğundan IEntityRepository\<TEntity> generic interface den kalıtım (SOLID deki **Interface Segregation**) almaktadır. IProductDal, ICategoryDal gerçekleyen EfProductDal ve EfCategoryDal class larında hiç bir metot yoktur. Çünkü içersine yazacağımız kodlar birbirinin aynısı olacağından EfEntityRepositoryBase\<TEntity, TContext> class içerisinde bir kere yazılarak kalıtım alması sağlanmıştır.

ORM (Object Relational Mapping) ilişkisel veritabanı yönetim sistemlerine direkt olarak müdahale yerine nesneler aracılığı ile müdahale edilmesini sağlayan bir köprüdür.&#x20;

Veri tabanına erişmek için gereken sorguları **Entity Framework** ORM aracı ile yazılabileceği gibi IEntityRepository interface ile soyutlama yağtığımızıdan kodumuzu değiştirmeden genişletme  (SOLID deki **Open-Closed**) yaparak daha lightweight çözüm olan **Dapper** micro-ORM ile de veri tabanına erişim yapabiliriz.

{% embed url="<https://medium.com/t%C3%BCrkiye/entity-framework-nedir-bff3943bec72>" %}

{% embed url="<https://medium.com/@kdrcandogan/entity-framework-nedir-6aed4dcf6328>" %}

{% embed url="<http://www.borakasmer.com/dapper-nedir/>" %}

{% embed url="<https://www.gokhan-gokalp.com/asp-net-core-serisi-01-dapper-ile-restful-api-tasarlama-ve-azure-app-servicese-deploy/>" %}

![Katmanlı Mimari Örneği](/files/-M37IvUJRolvovVKqOMD)

## 2020


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kurumahmut.gitbook.io/genel/yazilim-teknolojiileri/microsoft-.net-core-3.x-ile-katmanli-mimari-tasarimi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
