前段时间整理了一个简易的订单系统,主要是想熟悉一下Caliburn.Micro的开发流程。
使用后觉得这是一个非常适合桌面应用系统的开发框架,功能强大,且能保持干净的代码结构。
开发中结合Telerik的特点做了一些调整,但基本上还是MVVM的开发思想。
开发环境:VS2015,NetFramework4.5.2,Sqlite
相关的库:Caliburn.Micro,Telerik UI For WPF 2015Q1,Dapper

结构
代码结构:

业务结构:
Main------->List------->Form
首页上做业务模块的切换,子模块基本上都是列表和表单的形式。
说明
DictionarysService 里把常见的字典做了缓存,现代机器的内容足够可以放心的用缓存了^_^
GoodsService 里 类似如下的代码还可以在封装一下。个人觉得这样的形式能减少出错几率。
string fields = string.Join(",", oMaps.Keys);
string valueDefineds = string.Join(",", oMaps.Keys.Select(key => string.Format("@{0}", key)));
string strSql = string.Format("INSERT INTO T_Goods({0}) VALUES({1})", fields, valueDefineds);
var dynamicParams = new DynamicParameters();
oMaps.Apply(param => dynamicParams.Add(param.Key, param.Value));
using (IDbConnection cnn = DbHelper.GetConnection()){
cnn.Execute(strSql, dynamicParams);
}
OrderFormViewModel
类似的FormView都是用的 Caliburn.Micro.Screen基类,
可以关注一下和PropertyChangedBase的区别,
主要是为重载 OnViewLoaded(object view) 以及使用 this.TryClose。
比如如下的操作,最好调用一下 this.TryClose,否则某些Handle 可能会执行两次。
private void MyRadDataForm_EditEnded(object sender, Telerik.Windows.Controls.Data.DataForm.EditEndedEventArgs e){
......
eventAggregator.PublishOnUIThread(new OrderAddedEventArgs());
this.TryClose();
}
网友评论