今天去书店看到一本名为《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. Microsoft Office Excel cannot access the file, There are several possible reasons

    今天在做EXCEL打印读取模板时报错了,错误信息如下: Microsoft Excel cannot access the file 'D:\xx.xlsx'. There are several p ...

  2. 数据结构基础(21) --DFS与BFS

    DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图的深度 ...

  3. Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局

    Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就 ...

  4. Ubuntu15.04 + Matlab2014a + MatConvNet install and compile

    MatConvNet is a MATLAB toolbox implementingConvolutional NeuralNetworks (CNNs) for computer vision a ...

  5. mysql语法、特殊符号及正则表达式的使用

    http://blog.csdn.net/pipisorry/article/details/46773545 sql语言 结构化的查询语言.(Structured Query Language),是 ...

  6. 自己动手写web框架----2

    在上一节,我们自己写的web框架,只能运行显示一个HelloWorld.现在我们对其进行一次加工,让他至少能运行一个登陆程序. 首先看login.jsp <%@ page contentType ...

  7. centos 下安装mysql-5.6.11

    这次是在centos6.4下安装mysql,在安装之前,你要先确定你的linux已经安装了这些包: wget, gcc-c++, ncurses-devel ,cmake, make ,perl 如果 ...

  8. 【UML 建模】UML建模语言入门-视图,事物,关系,通用机制

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 一. UML视图 1. Ration ...

  9. XMPP系列(四)---发送和接收文字消息,获取历史消息功能

    今天开始做到最主要的功能发送和接收消息.获取本地历史数据. 先上到目前为止的效果图:              首先是要在XMPPFramework.h中引入数据存储模块: //聊天记录模块的导入 # ...

  10. linux下将eclipse项目转换为gradle项目

    本文针对于在linux环境下,不使用eclipse而把一个eclipse项目转换为gradle默认结构的项目的情况,脚本可能在mac下也适用,未验证. windows中的转换问题,以及使用eclips ...