.NET十年回顾

一、   引子

从我还是编程菜鸟时起,.NET就从来没让我失望过。总是惊喜不断。

当年我第一个项目是做个进销存。用的Winform。当时我是机电工程师。编程只是业余心血来潮而已。

.NET的低门槛、VS良好的编程体验及MSDN完善的说明让我从此踏上了码农的不归之路。

回首十年,是从.NET2.0一路走来,记得当年灵感之源发过一篇.NET技术堆栈大全,

http://www.cnblogs.com/unruledboy/p/NetStack.html),对照下自己,4.5的很少用到,其他技术或多或少都有涉及。

 

二、   .NET技术栈的分析

.NET从第一版发布至今,也有17年历史了。能经久不衰,肯定有它的特长和亮点。我认为它最大的亮点就是生产力。最大的特长是做桌面应用。

说通俗点,就是.NET什么都能做,做桌面他最精,出活他最快。

做移动端,.NET也有一席之地,xamarin和Unity。然而竞争对手有JAVA和Obj-C,Swift,H5与之PK。xamarin还嫩了点。

做后台服务,.NET Core,WCF这些技术不错,但服务器很多是Linux,JAVA先入为主,更有优势。

做网页,ASP.NET很好。但是竞争对手就更多更强了,JAVA,PHP,js,各种开源解决方案。

在现在流行的NO SQL、AI这些领域,.NET也有一席之地,然而这块它显然不是主流。

而在桌面这块,有WPF,Winform,和他相关的有WCF,WF,ADO.NET,EF,LINQ。结合Visual Studio,Ofiice,SQL  Server,竞争对手完全不是一个档次。

那么,这个技术栈最适合的领域是哪些呢,我认为就是运行在Windows系统上的各种程序。

 桌面应用要数据库有数据库,要服务有服务,要控件有控件,要报表有报表(RDLC),简直是要啥有啥。更不用说还有强大的第三方控件、丰富的开源组件。

如果有人想用JAVA或者其他什么技术做桌面,我只能说,这很奇葩。除非你对性能要求到苛刻程度。

如果你想做移动端,大数据,互联网什么的,继续用.NET没问题。但是性价比不突出。比如NO SQL这块的,其他语言擅长就让它做好了,.NET来调用就是。田忌赛马,扬长避短。

有人说桌面药丸,微软要倒,What?微软新CEO上台两年股票涨了一倍多,现在活得好好的,DELPHI这个没妈的孩子现在都在茁壮成长,是不是想多了。

又有人拿.NET的性能说事。说什么不如C++云云。这个之前的老赵、xiaotie他们都分析过,按我经验,还没发现有什么性能问题。

因为.NET类库和C#语言都有一个特点,就是给你多种选择。你想省事偷懒自然可以用现成的。想追求极致,甚至你可以用指针。我也用过指针。

差不了多少的性能,和天壤之别的开发效率,这个性价比应该仔细考量。

三、   极限压榨.NET技术栈的潜能

既然.NET最大亮点是生产力,就结合我个人的例子来说吧。

当初打算设计组态软件。单位不是软件公司,我的职责也不是设计组态软件。一开始只是心血来潮。但是面临一个很大问题。就是我看到的组态软件,WINCC,Intouch,都是庞然大物。

如果不是脑子烧掉,不会想着靠一己之力做出来。但是我分析之后,发现我只需要解决两个关键问题。一个是组态设计器,一个是网关。

网关我参考的是OPC规范。按下不表。组态设计器这个,因为我看上了WPF对图元的表现能力、Blend的零代码设计能力。先在网上搜WPF图形设计器,找到了这个:

 

感谢周金根提供的这个线索。找到了一套WPF开源的图形设计组件: Diagarm Designer。

然而看了代码体验了DEMO之后,再比较WINCC等的功能,感觉工作量还是十分巨大。

这时候我想,如果能把这套组件的界面连线功能纳入Visual Studio就好了。于是继续搜索,发现了这个:

https://msdn.microsoft.com/zh-cn/subscriptions/bb546938(v=vs.90).aspx

 

 果然微软没有让我失望。于是我只需要专注于如何将我需要的组态设计器功能嵌入到Visual Studio神器就可以。

.NET对数据库、文件IO、通讯协议的完美支持让我编程省了很多事。加上我之前积累的类库,进展飞快。

这时候碰到一个新问题,就是常规组态软件有一个重要功能:组态变量。也就比如1号电机、2号电机同时运行的话显示绿色,应该表示为:Motor1.Running & Motor2.Running。

这要求我的设计器能够支持常规的四则运算、逻辑运算,也就是支持复杂的表达式。

微软的表达式树ExpressionTree 提供了对表达式完美的封装。我可以方便的利用它实现我的语法。

我的业余爱好是研究程序化交易。我选择了Winform,绘制K线图我只用了几百行代码,就实现了一个可以缩放、拉伸、移动、加入自定义指标的K线图。

为什么这里选用Winform而非WPF?因为WPF优势是界面与代码分离,利用Blend工具人工绘图,冗余较多。但做K线图需要读入大量数据,程序生成,使用Winform提供的GDI+ API绘制效率更高。

 

我利用组态项目的表达式解析器加以改进,很快做出来股票预警器。其他地方也很多参考、借鉴了网关、组态设计器的现成代码和思路。

现在做成的这个交易系统,包括图形界面、自定义指标、各种函数支持、策略生成器、回测、实盘运行,总共代码也没有多少,非常简洁。这要感谢.NET强大的架构能力和类库。

很多人说python做程序化交易首选,比如python的脚本能力和各种图表绘制能力。但我大C#的强类型编程能力、架构能力、各种语法糖,写策略不是python能比的。至于自定义图表,别忘了可以导入或者嵌入EXCEL。

一旦你用惯了.NET,有了自己积累的类库,和长期培养的架构理念、抽象能力。你可以在桌面上实现你能想象到的大部分事,让程序成为你的好帮手。

有人说.NET 不能做大数据、不能玩阿尔法狗什么的。拜托。这些东西本来就不是个人、小团队玩的,是国家或者大集团才用得上的。别想多了。

作为一个.NET铁杆粉丝,我只感到庆幸。因为.NET很适合我和我的行业。两岸猿声啼不住,轻舟已过万重山。

github地址:https://github.com/GavinYellow/SharpSCADA。我的第一个开源项目。为了推广它,我这国庆节每天抽出点时间敲键盘。欢迎大家多提宝贵意见和建议。

原文地址:http://www.cnblogs.com/evilcat/p/7628041.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#生成anb文件

今天我们来看看C#中如何生成anb文件。 这个anb文件本来是要对接别的平台的,人家提供给我们一个协议,然后通过程序来生成,然后对方会根据生成的anb文件进行解析,然后得到心电图啥的。 代码如下: private void create…

开源纯C#工控网关+组态软件

一、 前言 在园子潜水也七八年了。说来惭愧,这么多年虽然一直自称.NET铁杆粉丝,然仅限于回几个不痛不痒的贴,既没有发布过代码,也没有写过文章。 看着.NET和C#在国外风生水起,国内却日趋没落,我也早觉得有…

面试官:给我说一下你理解的分布式架构

转载自 面试官:给我说一下你理解的分布式架构 # 什么是分布式架构 分布式系统(distributed system) 是建立在网络之上的软件系统。 内聚性:是指每一个数据库分布节点高度自治,有本地的数据库管理系统。 透明性&am…

c语言程序设计--图书管理系统

这个原本是c语言程序设计书里面的习题,老师布置的作业,既然写好了,就在网上分享下,相信肯定有很多和我一样使用的是这本教材,大家可以借鉴下答案,在dev c上运行是没有任何错误的。文末已经贴了源码&#xf…

Access denied for user ‘root‘ @‘123.233.244.218‘(using password:YES)的解决方法

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 在我们新买了个服务器之后,数据库我觉得是比不可少的吧,任何一个项目,只要是动态的,都需要数据做数据的服务于支撑,目前我…

初探SQL Server 2017 on Docker@macOS

编者语:假期到了最后一天,或者你人在旅途,或者你睡了8天,而我在家修炼了几天,完成了一堆好玩的,慢慢和大家分享下。 9月27日SQL Server 2017 正式发布,看点一堆,而这次发布不仅有传统…

阿里面试,为什么Kafka不支持读写分离

转载自 阿里面试,为什么Kafka不支持读写分离 为什么数据库、redis都支持了读写分离功能,而kafka却没有? 厮大也是狠人,直接打开源码从头开始讲,我一看这情况不对,按照这进度得讲到天黑了,蹭着…

手机号、邮箱、用户名均可登录系统的实现方式

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是2022年4月28日13:41:29! 需求:用户可以通过手机号、邮箱来注册我们的系统,用户完成之后,可以去完善自己的个人信息,…

.Net 内存对象分析

在生产环境中,通过运行日志我们会发现一些异常问题,此时,我们不能直接拿VS远程到服务器上调试,同时日志输出的信息无法百分百反映内存中对象的状态,比如说我们想查看进程中所有的Socket连接状态、服务路由信息等等。 即…

百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题

转载自 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题 UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。而且,它非常适合虚拟环境,比如:Docker。另外,它通过消…

nssl1193-地主【dp】

正题 题目大意 一个2∗n2*n2∗n的矩形,求分歌成k块的方案数。 解题思路 我们用fi,j,0/1f_{i,j,0/1}fi,j,0/1​表示前i列,分成j块,第i列是相同一块还是分开的一块。 然后我们分析 (不同颜色表示不同联通块)(字型体汇) 然后推出方程 (f[i][…

MyBatis-generator使用,Example缺少分页问题解决

一、分页问题 MyBatis自动生成代码没有分页功能。 如: public class User {private Integer userId;private String name;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId userId;}public String getName() {r…

调试 ASP.NET Core 2.0 源代码

在Visual Studio 2017中可以通过符号以及源链接,非常方便对 ASP.NET Core 2.0中源代码进行调试。在这篇文章中,我们将重点介绍如何使用源链接对ASP.NET Core源进行调试。 什么是源链接? 和我一样,您可能已经注意到在编译代码时&am…

html新知

文章目录[x]开门大吉轮播样式账户密码获取回车发送命令(按键)计时器通过按钮实现清屏选项卡(轮播图原型)阶乘密码一致登录导航栏(新学的,,,,,其实就是简单的h…

如何将每日新闻添加到自己博客中,发送到微信群中

大家好,我是雄雄。 前言 最近新整了个博客网站,同事在gitee上找的,还不错,gitee上的地址在这里:拾壹博客管理系统。 别人的业务,再好也有不满足自己的地方,所以我就拉下来源码看了看&#xff0…

Hack for Cloud Beginner微软黑客松大赛

在这美丽的西子湖畔,我们欢迎各行各业的开发者参与此次Hack for Cloud Beginner微软黑客松大赛。我们致力于为开发者们提供在技术、社区领域中的交流平台,重在参与,意于创新。 此次黑客松大赛将于10月22日在中国杭州拉开帷幕,参与…

Asp.Net Core 2.0 多角色权限认证

在使用 WebForm 技术开发网站的时候,微软就提供了 Form 身份认证,这使得登录认证简单了许多,不同于 WebForm 以及后来的 Asp.Net Mvc,Asp.Net Core 中的身份认证与之前相比使用更加便捷,本文介绍 Asp.Net Core 2.0 多角…

html近期所学

导航栏&#xff08;新学的&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;其实就是简单的href&#xff09; css 开门大吉 轮播样式 js css js1 js1 js1 js1 js1 js7 首先是css 开门大吉 改只需其中的gif <html><head><style>section{width…

asp.net core后台系统登录的快速构建

登录流程图 示例预览 构建步骤 当然&#xff0c;你也可以直接之前前往coding仓库查看源码&#xff0c;要是发现bug记得提醒我啊~ LoginDemo地址 1. 首先你得有一个项目 2. 然后你需要一个登录页面 完整Login.cshtml视图代码戳这里-共计55行 效果预览图 <!DOCTYPE html>&l…

JavaFX Chart设置数值显示

一、XYChart import javafx.application.Application; import javafx.geometry.NodeOrientation; import javafx.geometry.Side; import javafx.scene.Scene; import javafx.scene.chart.*; import javafx.scene.control.Label; import javafx.stage.Stage;public class LineC…