1. .Net 7
2. EntityFrameworkCore
3. Microsoft Identity
4. Json Web Token
5. Serilog
6. Ms Sql Server
7. FluentValidation
8. AutoMapper
9. Swagger
1.İsimlendirmeler İngilizce olmalı.
2.Interface isimleri 'I' notasyonu ile isimlendirilmeli --> IInterface
Burada belirlenen standartlar C# dosyaları için geçerlidir.
Dosya isimleri `.cs` uzantısına sahip dosyalar:
1. İsimler 'PascalCase' olmalı.
Veritabanı tablolarındaki yada veri setleri iç temsil eden dosyalar için geçerlidir.
Student.cs
StudentQuestion.cs
student.cs
studentQuestion.cs
Student_Question.cs
Veri tabanı tabloları ile entity sınıflarının konfigürasyon işlemlerini içeren sınıfları temsil eden dosyalar için geçerlidir.
StudentConfiguration.cs
StudentQuestionConfiguration.cs
Student_Question_Configuration.cs
studentQuestionConfiguration.cs
Veri transferi için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti][işlem][Dto].cs
StudentCreateDto.cs --> [Student][Create][Dto].cs
StudentListDto.cs
studentListDto.cs
Student_Create_Dto.cs
View üzerinde veri transferi için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti][işlem][VM].cs
StudentCreateVM.cs --> [Student][Create][VM].cs
StudentListVM.cs
studentListVM.cs
Student_Create_VM.cs
Veri transferi için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti][Repository].cs
StudentRepository.cs
StudentQuestionRepository.cs
studentRepository.cs
Student_Repository.cs
Uygulama içerisindeki servisleri yönetmek için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti / Servis][Service].cs
StudentService.cs
MailService.cs
AuthenticationService.cs
studentService.cs
Student_Service.cs
Uygulama içerisinde kullanılan interface'leri temsil eden dosyalar için geçerlidir.
IStudentRepository.cs
IMailService.cs
IEntity.cs
iStudentService.cs
StudentService.cs
IStudent_Service.cs
Yorumlar, programa etki etmeyen ancak kendimizin veya kodu inceleyen bir başkasının yapılan işlerin neden ve nasıl yapıldığını açıklamak için kullanılır.
// ---------------------------------------------------------------
// Copyright (c) Coalition of the Good-Hearted Engineers
// FREE TO USE TO CONNECT THE WORLD
// ---------------------------------------------------------------
//----------------------------------------------------------------
// <copyright file="StudentService.cs" company="OpenSource">
// Copyright (C) Coalition of the Good-Hearted Engineers
// </copyright>
//----------------------------------------------------------------
/*
* ==============================================================
* Copyright (c) Coalition of the Good-Hearted Engineers
* FREE TO USE TO CONNECT THE WORLD
* ==============================================================
*/
Method summary bir class, method, property, field vb. kod bloğunun yaptığı işi parametrelerin, sınıfların vb. elemanların neyi ifade ettiğini gösteren bilgi bloklarıdır.
Visual studio'da method summary oluşturmak için method öncesinde '///' yazıp method summary bloğu otomatik olarak oluşacaktır.
```csharp
///<summary>
/// Buraya Metodun yaptığı ana iş gelecek.
///</summary>
///<param name="Degisken1"> Değişken1 'i neden istiyoruz. </param>
///<param name="Degisken2"> Değişken2 'yi neden istiyoruz. </param>
///<param name="Degisken3"> Değişken3 'ü neden istiyoruz. </param>
///<param name="Degisken4"> Değişken4 'ü neden istiyoruz. </param>
///<exception cref="System.OverflowException">
/// Buraya eğer method bir exception barındırıyorsa onun koşullarını ekliyoruz
///</exception>
///<returns> Dönüş değerleri </returns>
```
Burada belirlenen standartlar C# class ve interface dosyaları için geçerlidir.
IStudentRepository.cs
IMailService.cs
IEntity.cs
iStudentService.cs
StudentService.cs
IStudent_Service.cs
Veritabanı tablolarındaki yada veri setleri iç temsil eden dosyalar için geçerlidir.
Student.cs
StudentQuestion.cs
student.cs
studentQuestion.cs
Student_Question.cs
Veri tabanı tabloları ile entity sınıflarının konfigürasyon işlemlerini içeren sınıfları temsil eden dosyalar için geçerlidir.
StudentConfiguration.cs
StudentQuestionConfiguration.cs
Student_Question_Configuration.cs
studentQuestionConfiguration.cs
Veri transferi için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti][işlem][Dto].cs
StudentCreateDto.cs --> [Student][Create][Dto].cs
StudentListDto.cs
studentListDto.cs
Student_Create_Dto.cs
View üzerinde veri transferi için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti][işlem][VM].cs
StudentCreateVM.cs --> [Student][Create][VM].cs
StudentListVM.cs
studentListVM.cs
Student_Create_VM.cs
Veri transferi için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti][Repository].cs
StudentRepository.cs
StudentQuestionRepository.cs
studentRepository.cs
Student_Repository.cs
Uygulama içerisindeki servisleri yönetmek için kullanılan sınıfları temsil eden dosyalar için geçerlidir.
> [Veri Seti / Servis][Service].cs
StudentService.cs
MailService.cs
AuthenticationService.cs
studentService.cs
Student_Service.cs
Method isimleri:
1. Methodun ne yaptığını özetleyecek şekilde olmalı.
2. Net ve kısa olmalı
3. Asenkron olan method isimleri 'Async' ifadesini barındırmalı
Method gerçekleştirdiği eylemi temsil eden fiili içermelidir.
public List<Student> GetAll()
{
...
}
public Student Add()
{
...
}
public List<Student> All()
{
...
}
public List<Student> getAll()
{
...
}
Asenkron methodlar isim sonuna ```Async``` ifadesini almalı ve ````Task``` yada ````ValueTask``` döndürmeli
public async Task<List<Student>> GetAllAsync()
{
...
}
public Student Add()
{
...
}
public async Task<List<Student>> GetAll()
{
...
}
Method parametreleri bir nesnenin hangi özelliğini ifade ettiğini atanacakları veya arama gibi herhangi bir eylem için kullanılacakları açık belirtmelidir.
public async Task<Student> GetByNameAsync(string studentName)
{
...
}
public async Task<Student> GetByIdAsync(Guid studentId)
{
...
}
public async Task<Student> GetByClassroomIdAsync(Guid classroomId)
{
...
}
public async Task<Student> GetByStudentNameAsync(string text)
{
...
}
public async Task<Student> GetByStudentNameAsync(string name)
{
...
}
Bir methodu kullanırken, parametre isimleri, kısmen veya tamamen aktarılan değişkenlerle eşleşirse, parametre ismi kullanmanız gerekmez, aksi takdirde değişkenlerden önce parametre ismi belirtmeniz gerekir.
Bir methodumuz olduğunu varsayalım:
Student GetByNameAsync(string studentName);
string studentName = "Todd";
Student student = await GetStudentByNameAsync(studentName);
Student student = await GetByNameAsync(studentName: "Todd");
Student student = await GetByNameAsync("Todd");
Student student = await GetByNameAsync(todd);
Değişken isimleri öz ve sahip olduğu veya potansiyel olarak tutacağı değeri temsil edecek şekilde isimlendirilmeli.
Değişkenin tutacağı değer tekil bir değeri temsil edecek şekilde isimlendirilmeli.
var student = new Student();
var hasStudent = await CheckNameAsync(studentName);
var studentModel = new Student();
var studentObj = new Student();
students.Where(student => student ... );
students.Where(s => s ... );
Değişkenin tutacağı değer çoğul değerleri temsil edecek şekilde isimlendirilmeli.
var students = new List<Student>();
var studentList = new List<Student>();