今天去书店看到一本名为《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#物联网程序设计基础》中的技术瑕疵,如果你将要读本书,请进来看看!的更多相关文章

  1. 学而精计算机公共基础学习之路TEST2(程序设计基础)

    程序设计基础 程序设计方法与风格 1.程序设计方法 程序设计: 指设计.编制.调试程序的方法和过程. 程序设计方法是研究问题求解如何进行系统构造的软件方法学.常用的程序设计方法有:结构化程序设计方法. ...

  2. C#程序设计基础——常量

    C#程序设计基础——常量 常量是在编译时已知,并且在程序的生存期内不发生更改的不可变值.常量使用const修饰符进行声明. 常量必须在声明时初始化,且常量的类型必须为以下类型之一:sbyte/byte ...

  3. Oracle数据库之PL/SQL程序设计基础

    PL/SQL程序设计基础 一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ ...

  4. C语言程序设计基础-第1周作业-初步

    1.安装带有计算机术语的翻译软件 2.在自己电脑上安装C编译器,windows系统建议安装dev-c++,其他系统自行查找. 3.加入课程小组,有任何疑问可以在小组中提问:https://group. ...

  5. C语言程序设计基础知识点概括

    C语言程序设计基础知识点概括 C语言程序设计基础知识点1.函数是C语言的基本构成单位.main函数是C语言程序的唯一入口.2.C语言程序开发过程. 编译过程:将以.c或.cpp结尾的源程序文件经过编译 ...

  6. Java程序设计基础项目总结报告

    Java程序设计基础项目总结报告 20135313吴子怡 一.项目内容 运用所学Java知识,不调用Java类库,实现密码学相关算法的设计,并完成TDD测试,设计运行界面. 二.具体任务 1.要求实现 ...

  7. 《C语言程序设计基础1》第二学期第一周学习总结

    **<C语言程序设计基础1>第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) ...

  8. 20145322第九周JAVA程序设计基础学习总结

    20145322第九周JAVA程序设计基础学习总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范.它定义一组标准类与接口,应用程序需要 ...

  9. 声明函数指针、回调函数、函数对象------c++程序设计基础、编程抽象与算法策略

    声明函数指针 #include<iostream> using namespace std; double a(double aa) { return aa; } int main() { ...

随机推荐

  1. 网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)

    js如何将html表格导出为excel文件(后记) 前言 项目前期做了个导出Excel表格的功能,但是经过测试发现只有在IE上才可以正确实现,在Chrome等浏览器中无法实现导出效果.经过上网搜索,尝 ...

  2. Java进阶(九)正则表达式

    java正则表达式 序 由于项目中使用到了利用正则表达式进行表单的校验,回想一下正则表达式的内容,忘得也差不多了,俗话说:"温故而知新,可以为师矣".今天就简单的温故一下正则表达式 ...

  3. BezierDemo开源项目的学习

    多看多学涨姿势,no zuo nuo die做暖男 1.概述 国际惯例,首先感谢一下开源作者. 这个项目主要是实现实现qq红点拖拽的效果 地址在https://github.com/chenupt/B ...

  4. C++对txt文本进行读写操作

    输入输出,是每个程序员的基本功,尤其是对文本的输入和输出.最近,自己在这方面做了一些总结,不是很全面,希望在以后学习和工作的过程中慢慢补充,积累点点滴滴.P.S. 今天天气不错,雾霾散了,天空晴朗,惠 ...

  5. 如何来看单片机外设A/D转换器ADC0804时序图

    如图,为单片机AD转换器的一种: ADC0804单片集成A/D转换器.它采用CMOS工艺20引脚集成芯片,分辩率为8位,转换时间为100µs,输入电压范围为0-5V.芯片内具有三态输出数据锁存器,可直 ...

  6. C语言之归并排序

    即将两个都升序(或降序)排列的数据序列合并成一个仍按原序排列的序列. 上代码: #include <stdio.h> #include <stdlib.h> #define m ...

  7. LeetCode之“数学”:Rectangle Area

    题目链接 题目要求: Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle i ...

  8. FFmpeg与VS2010

    编译FFmpeg是一件痛苦的事情,一般都直接使用Zeranoe FFmpeg Builds. 如果使用这个版本,需要注意ffmpeg的帮助里的一段话: To create import librari ...

  9. 【Android 应用开发】BluetoothSocket详解

    一. BluetoothSocket简介 1. 简介 客户端与服务端 : BluetoothSocket 和 BluetoothServerSocket 类似于Java中的套接字的 Socket 和 ...

  10. Gradle 1.12用户指南翻译——第四十三章. 构建公告插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...