加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

何时检查对象的状态,一般OOP,C#中的示例

发布时间:2020-12-15 05:37:26 所属栏目:百科 来源:网络整理
导读:我不太确定如何在一个句子中说出这个问题,所以我很难找到以前的帖子.这经常出现在我身上,我想就如何处理它达成共识. 假设您有两个类,ExampleClass和ExampleClassManager. ExampleClass有一个Update(数据数据)方法,它从ExampleClassManager中调用.但是,Exampl
我不太确定如何在一个句子中说出这个问题,所以我很难找到以前的帖子.这经常出现在我身上,我想就如何处理它达成共识.

假设您有两个类,ExampleClass和ExampleClassManager. ExampleClass有一个Update(数据数据)方法,它从ExampleClassManager中调用.但是,ExampleClass可以处于两种状态之一,并且处于Enabled状态,它希望处理在Update中传递给它的数据,而在处于禁用状态时,它根本不对数据执行任何操作.

我是否应该检查ExampleClassManager中的状态,如果它被禁用则根本不传递数据,或者我应该传递数据而不是在ExampleClass中忽略它?

这是一个代码示例,以防我没有明确表达清楚.

public class ExampleClass {
    public bool Enabled {
        get;
        set;
    }

    public void Update(Data data) {
        if(Enabled) {
            //do stuff with data
        }
    }
}

public class ExampleClassManager {
    private List<ExampleClass> exampleClassList=new List<ExampleClass>();

    public void UpdateList() {
        foreach(ExampleClass exampleClass in exampleClassList) {
            exampleClass.Update(data);
        }
    }
}

要么

public class ExampleClass {
    public bool Enabled {
        get;
        set;
    }

    public void Update(Data data) {
        //do stuff with data
    }
}

public class ExampleClassManager {
    private List<ExampleClass> exampleClassList=new List<ExampleClass>();

    public void UpdateList() {
        foreach(ExampleClass exampleClass in exampleClassList) {
            if(exampleClass.Enabled) {
                exampleClass.Update(data);
            }
        }
    }
}

解决方法

鉴于它取决于ExampleClass的属性,我选择选项1并在ExampleClass.Update中检查.否则,任何有权访问ExampleClass对象的对象都可以调用Update,而不管状态如何.通过在Update方法中进行检查,确保只有在启用对象时才会继续.这里的问题是谁可以改变对象的状态?

见Law of Demeter:

Each unit should have only limited knowledge about other units: only units “closely” related to the current unit.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读