現代微服務通常管理多個資料儲存來處理不同的任務。 有效管理這些資料存儲,同時保持應用程式的輕盈性、可維護性和可擴展性,需要強大的設計模式。本文以 GoFr 框架作為實際範例,探討工廠和依賴注入 (DI) 模式如何簡化資料來源整合。
工廠模式封裝了初始化邏輯,促進了更乾淨、更模組化、更可維護的程式碼。 這是一個 GoFr 範例:
<code class="language-go">func main() { app.AddMongo(mongo.New(mongo.Config{ URI: "mongodb://localhost:27017", Database: "test", ConnectionTimeout: 4 * time.Second, })) }</code>
<code class="language-go">// mongo package func New(config mongo.Config) *mongo.Client { client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(config.URI)) if err != nil { log.Fatal("Failed to connect to MongoDB:", err) } // Additional setup (e.g., ping, timeout). err = client.Ping(context.TODO(), nil) if err != nil { log.Fatal("Failed to ping MongoDB:", err) } return client }</code>
注意:這是一個簡化的範例。 完整實作請參考GoFr開源程式碼。
依賴注入(DI)透過外部傳遞依賴關係來促進模組化和可測試性。 GoFr 使用輔助方法簡化了 DI:
<code class="language-go">// AddMongo adds MongoDB to the app's container. func (a *App) AddMongo(db container.MongoProvider) { db.UseLogger(a.Logger()) db.UseMetrics(a.Metrics()) tracer := otel.GetTracerProvider().Tracer("gofr-mongo") db.UseTracer(tracer) db.Connect() a.container.Mongo = db }</code>
這種方法提供:
Feature | GoFr | Other DI Frameworks |
---|---|---|
Configuration Encapsulation | Uses helper methods (e.g., AddMongo ) |
May rely on automatic resolution, adding complexity |
Integrated Observability | Automatic logging, metrics, and tracing setup | Requires additional setup or external libraries |
Container-Based Access | Dependencies stored in a readily accessible container | Relies on containers, but may use reflection |
Explicit vs. Magic | Explicit dependency configuration | Often uses annotations or automatic wiring |
Flexibility | Full control over dependency injection | More abstracted setups, potentially less control |
>
支持蟑螂:#1346
以上是DataSource混亂了嗎?在這裡&#s如何修復它!的詳細內容。更多資訊請關注PHP中文網其他相關文章!