谈谈书本《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() { ...
随机推荐
- javascript语法之for-in语句
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 朴素贝叶斯分类法 Naive Bayes ---R
朴素贝叶斯算法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 勿忘初心 无畏未来 作为一个初学者,水平有限,欢迎交流指正. 朴素贝叶斯分类法 ...
- Android热插拔事件处理详解
一.Android热插拔事件处理流程图 Android热插拔事件处理流程如下图所示: 二.组成 1. NetlinkManager: 全称是NetlinkManager.cpp位于And ...
- MySQL学习笔记_10_MySQL高级操作(下)
MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...
- Leetcode_34_Search for a Range
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44021767 Given a sorted array o ...
- 算法学习笔记(一)C++排序函数、映射技巧与字典树
1.头文件algorithm中有函数sort()用于排序,参数为:排序起始地址,排序结束地址,排序规则(返回bool型)例如,要将array[] = {5,7,1,2,9}升序排列,则使用: bool ...
- C语言中数组转化为字符串的方法
#include<stdio.h> #include <stdlib.h> #include <string.h> #define NR(x) (sizeof(x) ...
- /etc/fstab文件分析(第二版)
/etc/fstab文件分析 前面说新建的分区在系统重启之后就会失效,要想永久生效,需要将其写入/etc/fstab文件 一./etc/fstab文件格式:6个组成部分 物理分区名/卷标 挂载点 文件 ...
- SharePoint 2010 -- Silverlight托管客户端模型简单示例
Silverlight托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverli ...
- C++之虚函数
<span style="font-size:18px;">#include <iostream> using namespace std ; class ...