viper/docs/adr/0005-deprecate-setters-in-f...

31 lines
997 B
Markdown
Raw Normal View History

# 5. Deprecate setters in favor of functional options during initialization
Date: 2021-07-20
## Status
Proposed
Referenced by [8. Deprecate the global Viper instance](0008-deprecate-the-global-viper-instance.md)
## Context
The Viper struct currently acts as a facade for reading, writing and watching configuration for changes.
Some of the configuration parameters can be changed runtime using setters which often lead to issues
with concurrent activities.
## Decision
Deprecate setters in favor of using functional options for configuring Viper when it's initialized.
Drop setters in Viper 2.
## Consequences
Since Viper's interface is usually invoked from a lot of places,
moving configuration to the place where it is initialized makes using Viper safer
(ie. someone can't just randomly call `Set` when they are only supposed to call `Get*`).
This change will also clarify what roles Viper can be used in and
makes the separation of internal components easier based on these roles.