在数据模型中已经有很多关于可变/不可变对象的说法了。
但是业务逻辑呢?例如:CD播放器。一个班负责播放CD。
// Immutable version:
class Player
{
CD cd;
public Player(CD cd) { ... }
}
// Mutable version:
class Player
{
CD cd;
public void ChangeCD(CD cd) { ... }
}
我可以想到两个版本的几个微妙优点和缺点。 例如,当玩家可变时,其他对象可以占用玩家,即使CD发生变化也能保持有效。当播放器是不可变的时,你需要一个包装器对象(例如命令模式),当创建一个新的播放器时它会被更新。
哪种情况更适合哪种版本?有没有一般指导方针?
答案 0 :(得分:1)
这是第三种选择。
class Player
{
// private CD myCD <- no private field for the CD
public Player() {}
public void playCD (CD cd) {}
}
玩家永远不应拥有CD对象。它应该只是被告知是一个CD对象,播放它。
更好的选择是
class CDPlayer : DataPlayer
{
public Player() {}
public void playData (IData cd) {}
}
class CD : IData {}
如果减少CD和播放器之间的耦合量,那么你真的不必过于考虑这一点。
我相信你的例子对你的实际问题有点不妥。