Ho una grande classe con proprietà complesse. Vorrei introdurre un'implementazione predefinita, consentire all'utente di eseguire l'override di parte dell'implementazione predefinita e assicurarsi inoltre che l'utente chiami un metodo di sincronizzazione in modo che l'oggetto sia sempre in uno stato coerente.
public class Complex {
public int Id { get; set; }
public CustomComplex1 Custom1 { get; set; }
public CustomComplex2 Custom2 { get; set; }
public Complex()
{
Custom1 = new CustomComplex1() { Name = "Bla", Cost = 55, etc..} // provide default values
}
//this method must always be called!
public void RegisterObject()
{
}
}
Class potrebbe essere usata in questo modo:
var a = new Complex(); // all default values set
a.Custom1.Name = "newName"; // I'd like to use the default values, but just change something..
a.RegisterObject(); // problem - client might forget to call this!
Ho pensato di usare il modello di builder, ma poi dovrò fornire metodi per modificare ogni variazione del tipo di CustomComplex1 - troppo lavoro e amp; Manutenzione. D'altra parte, se espongo Custom1 come proprietà pubblica, sembra che io stia facendo esattamente l'opposto dell'intento del modello di builder. Quindi, qual è un buon modo per A. consentire all'utente di modificare qualsiasi proprietà del mio oggetto complesso e B.force per chiamare RegisterObject in fase di compilazione?