1

例如,如果我有一堂课:

public class StuffHolder
{

    List<Stuff> myList;

    public StuffHolder()
    {
        myList = newList<Stuff>();
        myList.Add(new Stuff(myList));
        myList[0].stuffHappens();
    }

}

和一个东西对象:

public class Stuff
{
    List<Stuff> myList;

    public Stuff(List<Stuff> myList)
    {
        this.myList = myList;
    }

    public void stuffHappens()
    {
        myList.Remove(this);
    }
}

调用 stuffHappens() 而不是让 stuff 将应该删除的信息传递给 StuffHolder 类并让 StuffHolder 类删除特定的 Stuff 有什么缺点?

4

3 回答 3

5

如果 stuffHappens() 一次发生在多个线程中,则存在危险,因为该List<T>集合不是线程安全的。

更大的危险是责任的混淆,因为 Stuff 的工作可能不应该是知道它被存储在一个集合中。随着系统的发展和发展,这种设计“模糊性”会导致不断增加的混乱。

于 2012-07-03T00:03:02.003 回答
0

它肯定会起作用(即 Stuff 对象将从列表中删除)。

问题是为什么你首先有一个 StuffHolder。通常当你像这样包装一个集合时,你这样做是为了维护一些不变量或缓存一些数据。像这样使用列表意味着您可能违反不变量。

本质上,问题在于 StuffHolder 不知道某个对象已从其列表中删除。对于您的特定情况,这是否是一个问题取决于您。

于 2012-07-03T00:02:55.657 回答
0

从代码的角度来看是可能的,所以没关系。答案取决于你在建模什么,你所做的设计。可能在某些情况下该解决方案不是一个好的解决方案,而在某些情况下它是。如果你愿意,你可以分享你想要实现的目标,然后我们可以讨论。

希望能帮助到你。

于 2012-07-03T00:04:33.643 回答