-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
目前模块注册的代码 cat::init(&mut app); 出现在了 main.rs 中,这样的结构会导致以后所有实现具体命令的模块的开发者,
都需要修改 main.rs 框架层的代码才行,这样的实现可能不是一个好的设计。
好的设计原则应该是框架层定义好接口/模块规范后,尽量不再被改动,模块来适应框架,只改模块里面的代码。
例如 Linux 设备驱动的 framework,可以支持以后各种各样的新增硬件设备加入到驱动框架里,驱动只做驱动层,不会改动框架代码。
fn main() {
// 新建 app
let mut app = App::new();
/* 注册模块 start */
cat::init(&mut app);
/* 注册模块 end */
loop {
let mut s = String::new();
// 等待用户输入
io::stdin().read_line(&mut s).unwrap();
s = s.trim_end().to_string();
if s.is_empty() {
panic!("空字符串");
}
let (cmd, args) = {
match s.split_once(' ') {
Some(res) => (res.0, Some(res.1)),
None => (&*s, None),
}
};
// 获取命令
let command = app.get_command(cmd);
// 执行命令
command.execute(args);
}
}
Metadata
Metadata
Assignees
Labels
No labels
