В последнее время я осознал преимущество (некоторые могут утверждать, что чрезмерное использование) неизменяемых объектов, позволяющее значительно сократить проблемы с зависимостями чтения-записи в моей объектной модели, их результирующие условия и побочные эффекты, чтобы в конечном итоге упростить кодуправлять (что-то вроде функционального программирования).
Эта практика привела меня к созданию объектов, доступных только для чтения, которым предоставляются значения во время создания / создания, а затем к доступу только для публичных получателей для внешних вызывающих абонентов.получить доступ к свойствам с.Защищенные, внутренние и частные сеттеры позволяют поддерживать внутренний контроль над записью в объектную модель.
При создании интерфейсов при создании API поверх моей объектной модели я начал рассматривать те же проблемы с неизменяемостью.Например, предоставляя только открытые методы получения на моих интерфейсах, и предоставляя разработчикам самим решать, какие методы установки и как обрабатывать этот аспект.
Пример интерфейса «только для чтения» для реализации, который я 'Я говорю о том, является ли это ценным предметом (просто для демонстрации):
public interface IValuableItem {
decimal Amount {get;}
string Currency {get;}
}
Однако я удивился , как мне предоставить сопутствующий интерфейс, который позволяет писать (и если мне следует) и не объединяйте эти операции в одном и том же интерфейсе, чтобы не «испортить» его неизменность.
Следующие идеи пришли мне на ум, просто из головы.Без предоставления того, что я считаю плюсом и минусом каждого, как вы думаете, лучший подход - ?Существует ли в отрасли методология кодирования для управления этой концепцией?
// companion writer
public interface IValuableModifier {
decimal Amount {set;}
string Currency {set;}
}
или
// explicit methods to enforce importance of or deviance in the programming
public interface IValuableModifier {
void SetAmount(decimal val);
void SetCurrency(string cur);
}
или
// companion writer that inherits the original interface
public interface IValuableModifier : IValuableItem { //...
или
// Let a concrete class choose one and/or the other.
class Concrete : IValuableModifer, IValuableItem { //...
или
и т. Д. *
Что еще может помочь мне наполнить написание моей неизменной модели программирования и сохранить ее умеренно гибкой или, по крайней мере, разделить проблемы для лучшего контроля над ней?