在编写 GUI 应用程序时,我使用“控制”或“协调”应用程序的顶级类。顶级类将负责协调诸如初始化网络连接、处理应用程序范围的 UI 操作、加载配置文件等事情。
在 GUI 应用程序的某些阶段,控件被移交给不同的类,例如,一旦用户进行身份验证,主控件就会从登录屏幕切换到数据输入屏幕。不同的类需要使用顶层控件所拥有的对象的功能。过去我会简单地将对象传递给从属控件或创建一个界面。最近我已经改为传递方法委托而不是整个对象,主要原因有两个:
- 单元测试时模拟方法比模拟类容易得多,
- 它通过在类构造函数中准确记录下级类正在使用哪些方法,使代码更具可读性。
一些简化的示例代码如下:
delegate bool LoginDelegate(string username, string password);
delegate void UpdateDataDelegate(BizData data);
delegate void PrintDataDelegate(BizData data);
class MainScreen {
private MyNetwork m_network;
private MyPrinter m_printer;
private LoginScreen m_loginScreen;
private DataEntryScreen m_dataEntryScreen;
public MainScreen() {
m_network = new Network();
m_printer = new Printer();
m_loginScreen = new LoginScreen(m_network.Login);
m_dataEntryScreen = new DataEntryScreen(m_network.Update, m_printer.Print);
}
}
class LoginScreen {
LoginDelegate Login_External;
public LoginScreen(LoginDelegate login) {
Login_External = login
}
}
class DataEntryScreen {
UpdateDataDelegate UpdateData_External;
PrintDataDelegate PrintData_External;
public DataEntryScreen(UpdateDataDelegate updateData, PrintDataDelegate printData) {
UpdateData_External = updateData;
PrintData_External = printData;
}
}
我的问题是,虽然我更喜欢这种方法,而且这对我来说很有意义,但下一个开发人员如何找到它?在示例和开源 C# 代码中,接口是解耦的首选方法,而这种使用委托的方法更倾向于函数式编程。我是否可能让后续开发人员低声咒骂什么是违反直觉的方法?