这样MVVM和DDD中的几大样算是全了,可以开始了。计划是做一个类似记事本一样的东西,可以添加标题,内容,并进行分类。应用会记录添加时间和最后编辑时间。业务逻辑简单,需要数据库操作,所以看了下UWP的数据库操作,然后就被啪啪啪打脸了。
UWP貌似只支持SQLite本地数据库,不过SQLite也行啊,反正下几个dll引用一下,数据库操作封装到Infrastructure,实体映射封装到Domain的Repository,有强大的理论武器,怕什么。结果看了下UWP中的SQLite操作然后就脸肿了,UWP中SQLite数据库操作不是基于ADO.NET实现的,微软自己包装了一套叫SQLitePCL,实在太简单易用了。两行代码就执行完数据库操作,但获取的数据并不是DataSet或DataTable那种数据列表,只能获取SQLite对象然后一行一行读取数据,或者自己封装成DataTable那样的对象,返回到领域层,再由领域层映射为领域层对象。我是有多蛋疼才会那么做啊!好吧我真的那么做了,只是为了试一下分层,以后UWP开发中绝对不会第二次这么做了。以后在需要SQLite数据库操作时直接在领域层中获取数据并映射成领域实体对象,好吧,在领域层中出现了SQL语句,这脸打的,不过我有法宝:任何设计都要看场景!UWP中真的没有必要把数据库操作放到基础层,可以把UWP中的SQLite看作已经封装好了的基础层的功能,就差一条SQL语句当参数了。当然UWP上也有比较成熟的ORM工具,不过我没有使用。
0x07 实践后的想法果然实践出真知。
还有就是由于刚开始学习UWP,很多地方不太熟悉,有些希望达到的效果实现起来比较慢,所以这个实例最终还没有做完。后面边学边做吧,牵扯到的一些技术问题都解决了估计也就入门了。另外在使用之前自己写的简易的MVVM框架去实际开发UWP应用时也发现了框架的一些不足,例如页面导航用到Frame,所以在ViewModelBase中加入了Frame方便在ViewModel中导航,也体会到了设计时显示测试数据的重要性,无需运行就能看到数据显示的样子,可以直接在设计界面观察效果。为此加入了ViewModelLocator,在ViewModelBase中加入了InitTestData()和InitRealData()等,根据是不是DesignMode加载不同数据等等,这些等后面单独写一篇文章吧。
看了领域驱动的一些文章后对WPF开发也有很大的启发,后面再做项目的时候可以从领域层的业务逻辑开始,分析完领域层后由擅长数据库的人员去设计数据库表和存取方法,只要最后按照领域层需求提供相应的操作即可,领域层定义和实现Repository接口,基于接口完成业务逻辑的编写,应用层调用领域层和基础层完成程序的功能和交互,开发界面的只要在需要数据的地方绑定数据,在需要执行命令的地方绑定命令就可以了。
第一次写这么长的文章,感觉想说的东西很多,不知道该怎么写,写作能力太差啊。写了3个多小时感觉乱七八糟的也不知道有没有说明白,好吧,反正我自己是越写越明白了。最后还有一点感受就是虽然红轴比较轻,打字时间长了手也会酸啊。
0x08 相关下载https://github.com/durow/TestArea/tree/master/UWPDDD
示例还没有写完,不过大概框架有了。还需要边学习边完善。