例如,如果我有一个班级:
public class StuffHolder
{
List<Stuff> myList;
public StuffHolder()
{
myList = newList<Stuff>();
myList.Add(new Stuff(myList));
myList[0].stuffHappens();
}
}
Run Code Online (Sandbox Code Playgroud)
和一个东西对象:
public class Stuff
{
List<Stuff> myList;
public Stuff(List<Stuff> myList)
{
this.myList = myList;
}
public void stuffHappens()
{
myList.Remove(this);
}
}
Run Code Online (Sandbox Code Playgroud)
调用stuffHappens()而不是让东西传递应该删除的信息到StuffHolder类并让StuffHolder类删除那个特定的Stuff有什么缺点?
如果stuffHappens()一次出现在多个线程中,则存在危险,因为List<T>集合不是线程安全的.
更大的危险是责任的混乱,因为它可能不应该是Stuff的工作,以了解它存储在一个集合中.随着系统的发展和演变,这种设计"模糊"导致混乱不断增加.