Il mio servizio Windows è nettamente suddiviso in 5 componenti, ognuno con la propria interfaccia e uniti da un bootstrapper. Uno dei miei requisiti è quello di fornire opzioni di configurazione nel mio app.config per i diversi pezzi dell'applicazione.
Ho iniziato con la seguente interfaccia:
public interface IConfiguration
{
/// <summary>
/// The amount of time database records are allowed to be in the system before they're removed.
/// </summary>
TimeSpan OldSignalValuePurgePeriod { get; }
/// <summary>
/// The lowest log level that will be written to the log file.
/// </summary>
LogSeverity MinimumLogSeverity { get; }
/// <summary>
/// The period of time to wait for a signal metadata response before re-requesting it.
/// </summary>
TimeSpan SignalMetadataRerequestPeriod { get; }
}
su cui avevo pianificato di passare un'istanza costruita di ciascuno dei miei componenti che richiedeva la configurazione. Il fatto è che ognuna delle proprietà di cui sopra è un'opzione di configurazione per un componente diverso. Ci sono ottime possibilità che aggiungerò altre proprietà in un secondo momento a questa interfaccia. Ovviamente sto compilando le proprietà dell'interfaccia nel costruttore dell'oggetto di implementazione leggendo il file app.config.
Ciò di cui sto combattendo è questo: poiché ogni componente non si preoccupa delle opzioni di configurazione degli altri componenti, come posso separare questa interfaccia in parti specifiche per ogni componente che non è un problema da costruire, e uno che Jimmy capirà immediatamente?
Ho pensato di fare qualcosa del genere:
public interface IRepositoryConfiguration
{
TimeSpan OldSignalValuePurgePeriod { get; }
}
public interface ILoggingConfiguration
{
LogSeverity MinimumLogSeverity { get; }
}
public interface IDataManagerConfiguration
{
TimeSpan SignalMetadataRerequestPeriod { get; }
}
public class ConfigurationImplementation
: IRepositoryConfiguration,
ILoggingConfiguration,
IDataManagerConfiguration
{
}
dove ogni componente prende un'istanza della propria interfaccia di configurazione, ma sento che è eccessivo e inizia a diventare ingestibile.
Input?