Много было сказано об изменчивых / неизменных объектах в модели данных.
Но как насчет бизнес-логики?Например: проигрыватель компакт-дисков.Один класс отвечает за воспроизведение компакт-диска.
// Immutable version:
class Player
{
CD cd;
public Player(CD cd) { ... }
}
// Mutable version:
class Player
{
CD cd;
public void ChangeCD(CD cd) { ... }
}
Я могу вспомнить несколько тонких преимуществ и недостатков обеих версий.Например, когда проигрыватель является изменяемым, другие объекты могут захватывать проигрыватель, и он остается действительным, даже если компакт-диск изменяется.Когда игрок является неизменяемым, вам нужен объект-обертка (например, Command Pattern), который обновляется при создании нового игрока.
Какая версия предпочтительнее в каких случаях?Есть ли общие рекомендации?