Skip to content

LoD

约 174 字小于 1 分钟

2025-05-14

违反迪米特法则的代码

public class Button {
    public void Click() {
        // 直接访问和修改其他控件,违反迪米特法则
        Label label = new Label();
        label.Text = "Clicked";
        label.ForeColor = Color.Red;
        
        TextBox textBox = new TextBox();
        textBox.BackColor = Color.Yellow;
        textBox.Text = "Button Clicked";
    }
}

符合迪米特法则的代码

// 1. 引入中间层 UIController
public class UIController {
    private Label label;
    private TextBox textBox;
    
    public UIController(Label label, TextBox textBox) {
        this.label = label;
        this.textBox = textBox;
    }
    
    public void UpdateUI() {
        UpdateLabel();
        UpdateTextBox();
    }
    
    private void UpdateLabel() {
        label.Text = "Clicked";
        label.ForeColor = Color.Red;
    }
    
    private void UpdateTextBox() {
        textBox.BackColor = Color.Yellow;
        textBox.Text = "Button Clicked";
    }
}

// 2. Button类只需要知道UIController
public class Button {
    private UIController uiController;
    
    public Button(UIController uiController) {
        this.uiController = uiController;
    }
    
    public void Click() {
        // Button只需要知道UIController,不需要知道Label和TextBox的存在
        uiController.UpdateUI();
    }
}

From: Claude-3.5

贡献者