Ho già chiesto " Gestire un'interfaccia di grandi dimensioni ".
Ho un'altra domanda riguardo a questa situazione. Mi è stato fatto notare che ho usato un sacco di getter e setter e così ho rotto l'incapsulamento. Ne sono consapevole, ma non posso davvero immaginare come lo codificherei diversamente. Tutti i miei getters mi sembrano naturali: espongono le informazioni su cui reagisco direttamente nell'interfaccia utente. Come potrebbe essere migliorato in questo modo?
Il codice dalla domanda originale:
public interface ISystemSolver
{
// Configuration
int NumberBase { get; set; }
bool CaseSensitive { get; set; }
bool LeadingZeros { get; set; }
// State
IReadOnlyList<int> ForbiddenValues { get; }
IReadOnlyList<char> ForbiddenVariables { get; }
event EventHandler OnTooManyVariables;
bool AreThereTooManyVariables { get; }
// Variables
IEnumerable<Variable> Variables { get; }
void RemoveVariable(int index);
void AddVariable(char variable, int value);
// Equations
IEnumerable<Equation> Equations { get; }
void RemoveEquation(int index);
void AddEquation(string equation);
// Solving
IEnumerable<Solution> Solve();
}
MODIFICA: utilizzo di ForbiddenValues
e ForbiddenVariables
private void UpdateVariablesComboBox()
{
// Get the forbidden variables
var forbiddenVariables = _manager.ForbiddenVariables;
// Get the variables that are not forbidden
var items = _manager.Variables
.Where(c => !forbiddenVariables.Contains(c))
.Select(c => c.ToString())
.Cast<object>()
.ToArray();
// Clear the combo box
_variablesComboBox.Items.Clear();
// Update the combo box
_variablesComboBox.Items.AddRange(items);
}
private void UpdateValuesComboBox()
{
// Get the current number base
var currentBase = _manager.NumberBase;
// Get the forbidden values
var forbiddenValues = _manager.ForbiddenValues;
// Get possible values that are not forbidden
var items = Enumerable.Range(0, currentBase)
.Where(i => !forbiddenValues.Contains(i))
.Select(i => i.ToString())
.Cast<object>()
.ToArray();
// Clear the combo box
_valuesComboBox.Items.Clear();
// Update the combo box
_valuesComboBox.Items.AddRange(items);
}