谈谈书本《c#物联网程序设计基础》中的技术瑕疵,如果你将要读本书,请进来看看!
今天去书店看到一本名为《c#物联网程序设计基础》的书,对物联网感兴趣的我抓起来就看,书中的项目都是上位机开发项目,较简单,如果物联网开发只是这样,看起来我做物联网开发也是绰绰有余。这边书我看了十几分钟就看完了,其中的技术硬伤让我不得不正视。此书说使用wpf来写程序,但除了创建一个WPF项目,用WPF来写界面,和wpf没任何关系,代码还是写在后台,后台代码还是以Winform的方式来写。请问作者是不是对WPF有什么误解?
用WPF来写你不用MVVM模式来写?好吧,就算因为是小项目,不用MVVM模式来写,后台代码也以WPF来写吧?比如命令、绑定、值转换器等,下面列举书里的几个例子,来让大家看看本书中的技术瑕疵。
这里定义了一个实体类,既然定义了实体类,那顺便用mvvm模式来分层很难吗?

实现函数btnCollect_Click,让button上显示“开始采集”、“停止采集”有很多优雅的方式,为何用这么丑陋的方式实现?既然本书说用wpf来写的,在类里也定义了isCollecting的布尔类型,直接用WPF的值转换器更直截了当,定义一个属性,在button上绑定此属性的值转换,函数btnCollect_Click一句话代码就能实现了,也能让读者体会了什么是WPF,WPF的精韵是什么。而且就算是像书中的方式来实现函数btnCollect_Click,写个变量很难吗?先将“开始采集”、“停止采集”分别赋予两个不同的字符串变量,再在这里调用不可以?没有经验的人可能觉得多此一举。但想象一下,当需要在另一个函数中也要让此button显示“开始采集”、“停止采集”,赋予变量的方式是不是就方便了很多?而当“开始采集”的文字要修改为“开始”或其它字符时,你不用到几个地方修改文字,只需要修改字符串变量的值。可能有人说这是小项目,这样做多此一举。但好的习惯就应该从开始接触编程做起。要是像书中这样的编程习惯用到项目中,轻则狗血喷头,重则被辞退。

如果是用WPF来实现函数Page_Loaded,像书中这样的方式是要被喷的——书中是标准的winform做法。WPF的做法是定义串口、波特率的集合或类,然后分别绑定到下拉框列表控件cmbPort、cmbBaudRate上。

如果说上面是用WPF写后台代码,与后台代码结合方面有问题,那下面说到的就是作者使用WPF布置界面方面的问题:
1、控件的共用样式都写在了控件里而不是写在共用样式里,如果实习生敢这样写乱棍打死。
2、WPF控件中的高度、宽度一般不用Height,而是用MinHeight、MaxHeight来定义最小高度、最大高度,以让控件实现不同窗口大小情况下的自适应——这是WPF写界面的优势,而作者抛弃了,用winform的思维来实现,界面代码中充斥着大量的Margin也是winform思维的体现。

也许作者解释:引入大量的WPF特性,会增加学习成本。那你可以分成Winform项目和WPF项目。winform项目作为书中标准的一部分,而wpf项目则作为扩展阅读,让对真正WPF技术有兴趣的人去学习。而不是说“本书用到wpf”而硬生生的一直用winform方式写项目,这可能会导致读者对WPF的误解,可能将读者误入歧途。
最后,祝《c#物联网程序设计基础》下一版本实现质的飞跃!
谈谈书本《c#物联网程序设计基础》中的技术瑕疵,如果你将要读本书,请进来看看!的更多相关文章
- 学而精计算机公共基础学习之路TEST2(程序设计基础)
程序设计基础 程序设计方法与风格 1.程序设计方法 程序设计: 指设计.编制.调试程序的方法和过程. 程序设计方法是研究问题求解如何进行系统构造的软件方法学.常用的程序设计方法有:结构化程序设计方法. ...
- C#程序设计基础——常量
C#程序设计基础——常量 常量是在编译时已知,并且在程序的生存期内不发生更改的不可变值.常量使用const修饰符进行声明. 常量必须在声明时初始化,且常量的类型必须为以下类型之一:sbyte/byte ...
- Oracle数据库之PL/SQL程序设计基础
PL/SQL程序设计基础 一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ ...
- C语言程序设计基础-第1周作业-初步
1.安装带有计算机术语的翻译软件 2.在自己电脑上安装C编译器,windows系统建议安装dev-c++,其他系统自行查找. 3.加入课程小组,有任何疑问可以在小组中提问:https://group. ...
- C语言程序设计基础知识点概括
C语言程序设计基础知识点概括 C语言程序设计基础知识点1.函数是C语言的基本构成单位.main函数是C语言程序的唯一入口.2.C语言程序开发过程. 编译过程:将以.c或.cpp结尾的源程序文件经过编译 ...
- Java程序设计基础项目总结报告
Java程序设计基础项目总结报告 20135313吴子怡 一.项目内容 运用所学Java知识,不调用Java类库,实现密码学相关算法的设计,并完成TDD测试,设计运行界面. 二.具体任务 1.要求实现 ...
- 《C语言程序设计基础1》第二学期第一周学习总结
**<C语言程序设计基础1>第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) ...
- 20145322第九周JAVA程序设计基础学习总结
20145322第九周JAVA程序设计基础学习总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范.它定义一组标准类与接口,应用程序需要 ...
- 声明函数指针、回调函数、函数对象------c++程序设计基础、编程抽象与算法策略
声明函数指针 #include<iostream> using namespace std; double a(double aa) { return aa; } int main() { ...
随机推荐
- 敏捷测试(8)--ATDD整体研发流程
ATDD整体研发流程 有了前面的基于story的敏捷基础,接下来来介绍一下验收测试驱动开发的整个流程. 名词解释: ATD,即验收测试设计(acceptancetest design) PM,即需求整 ...
- python字典作为统计记录工具
1.python 利用字典作为计数项,统计指定项的个数 #!/usr/bin/python ta={} key = "test" if not key in ta: ta[ ...
- 文件I/O实践(2) --文件stat
功能:获取文件元数据 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int st ...
- Callable与Future
本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 在前面写的代码中,所有的任务执行也就执行了,run方法的返回值为空. 这一节我们说的Callable就是一个可以带 ...
- 总结C语言在嵌入式开发中应用的知识点(文件数据的加密与解密)
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...
- Gibbs sampling
In statistics and in statistical physics, Gibbs sampling or a Gibbs sampler is aMarkov chain Monte C ...
- ASI与AFN网络请求的的比较
对比 ASI AFN 更新状态 2012年10月份,已经停止更新 持续更新中,目前已更新至3.0版 介绍 ASI的直接操作对象ASIHTTPRequest,是一个实现了了NSCopying协议的NSO ...
- .net framework 4 线程安全概述
线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的.早期的时候, ...
- (WPS) 网络地理信息处理服务
WPS 标准为网络地理信息处理服务提供了标准化的输入和输出. OGC® Web Processing Service (WPS) 标准描述了如何通过远程的任何算法和模型处理获得地理空间的栅格或矢量信息 ...