这两天在写程序,一直在想模块之间的信息交流到底用什么方式,GUI中接收到的数据如何才能和逻辑层中的业务进行交流,一开始我使用的是字符串,感觉这种方式很不好,于是开始考虑使用对象来传递消息。
使用字符串是一开始编程的时候很容易想到的,很直观简单,可是使用的时候就不是这个样子了,使用字符串的话,模块之间的耦合会加大,不利于软件的更改。比如说我现在遇到的情况。一开始用户只需要选择要比较的图层和要比较的属性项,可是现在要增加一个容限值(tolerance)参数,我的修改就很麻烦了。
//GUI中的对象,_selectedFeatrClsesList,_slctedFieldsList是用户选中的信息
Stopwatch sw = new Stopwatch(); sw.Reset(); sw.Start(); bool isRunOk = _bussinessProcess.Run(_selectedFeatrClsesList, _slctedFieldsList);//执行逻辑比较操作 sw.Stop();
1 public bool Run(IList<string> slctedFeatr, IList<string> cmprFlds) 2 { 3 AttributeCompare attrCompr = new AttributeCompare(_mxDoc, slctedFeatr, cmprFlds); 4 string saveFilePath = ShowSaveDialog(); 5 6 if (saveFilePath == string.Empty) 7 { 8 return false; 9 } 10 else 11 { 12 attrCompr.ExcuteCompare(saveFilePath); 13 14 return true; 15 } 16 }
如果要添加参数的话,就需要再修改run函数的参数,很不方便,如果写一个args类,就只需要在界面层中增加tolerance参数即可。而对其他的类没有影响。