go101

Ders 7: Golang’de Clean Architecture ile Proje Yapısı

Golang’de Clean Architecture kullanarak bir proje yapısını en iyi şekilde organize etmek için dikkat edilmesi gereken birçok nokta var. Bu, hem projenin modüler, sürdürülebilir ve test edilebilir olmasını sağlar hem de uzun vadede kodun bakımını kolaylaştırır. Şimdi, önerdiğimiz klasör yapısını ve bunun nedenlerini detaylıca inceleyelim:

1. Clean Architecture Nedir?

Clean Architecture, Robert C. Martin (Uncle Bob) tarafından ortaya atılan bir yazılım mimarisi prensibidir. Bu mimari, yazılımın bağımsız, esnek, test edilebilir ve sürdürülebilir olmasını amaçlar. Clean Architecture’da temel olarak şu katmanlar bulunur:

2. Proje Klasör Yapısı ve Anlamı

myproject/
├── cmd/
│   ├── app/
│   │   └── main.go
│   └── bot/
│       └── main.go
├── internal/
│   ├── config/
│   │   └── config.go
│   ├── domain/
│   │   ├── entities.go
│   │   └── interfaces.go
│   ├── usecase/
│   │   ├── app_service.go
│   │   ├── bot_service.go
│   │   ├── app_service_test.go
│   │   └── bot_service_test.go
│   ├── adapter/
│   │   ├── db/
│   │   │   └── postgres.go
│   │   ├── http/
│   │   │   └── handler.go
│   │   └── repository/
│   │       └── user_repo.go
│   ├── infrastructure/
│   │   ├── logger.go
│   │   └── db.go
│   └── bot/
│       ├── bot_logic.go
│       └── bot_scheduler.go
├── pkg/
├── migrations/
├── go.mod
└── go.sum

3. Klasörlerin Açıklamaları

4. Nasıl Başlamalıyız?

Hikaye: Rider of Demand adında bir uygulama geliştirmek istiyoruz. Bu uygulama, kullanıcıların taleplerini karşılayan bir platform olacak. Kullanıcılar, uygulama üzerinden bir talep oluşturabilecek ve bu talepleri karşılayan sürücüler, talepleri alıp işleyecekler.

Adım Adım İlerleyelim:

1. Loglama ve Konfigürasyon Yapılarını Kurun:

2. Varlıklar (Entities) Katmanını Oluşturun:

3. Arayüzler (Interfaces) Katmanını Tanımlayın:

4. Kullanım Senaryoları (Use Cases) Katmanını Oluşturun:

5. Veritabanı Adaptörünü (Database Adapter) Oluşturun:

6. Authentication ve Authorization Mekanizmasını Kurun:

7. API Endpoint’lerini ve HTTP Handler’larını Oluşturun:

8. Servisleri ve İş Mantığını (Service Layer) Oluşturun:

9. Uygulamanın Başlangıç Noktalarını (Entry Points) Tanımlayın:

10. Integration Testleri Oluşturun: