经常在一些技术社区看到这些的问题,一个.NET开发者去求职,看到应聘的公司的技术栈还是比较老的ASP.NET WEBFORM的时候,希望了解未来会否使用ASP.NET MVC的时候,没有获得肯定答复,于是就放弃了这一份机会,以技术选企业,是否必要?

最近我在开发一个开源的微商城系统OdnShop,发布之后,有些用户就问,怎么不是ASP.NET MVC的?不支持MSSQL吗?要上.NET CORE了,诸如此类的问题。当然这些问题并没有标准答案,从技术本质来说,技术只是用来解决业务问题的一种手段,所以技术的新旧并不是考虑的核心,但开发效率,维护成本,稳定性等等确实必须考核,因为他会影响投入,影响收益。

所以,我想就.NET程序员如何看待新技术,如何选择新技术,提供一种我的思考,希望大家理性思考,理性讨论,不要把某种框架,某种技术作为一种宗教信仰。

一,WEBFORM OR ASP.NET MVC?

WEBFORM的本意是很好的,就是希望把桌面开发的那一套拖拉控件的模式借鉴到了WEB开发,如果你开发过WINFORM就应该知道,拖拉控件实现GUI是很方便,当然了要实现很炫酷的GUI的时候,就不容易了,因为需要深入了解控件的原理以及GDI等技术,但是WEB就不同了,HTML+CSS可以实现很美观的界面,只要想的到,都可以做的到,但是因为基于HTML标记语言,多了一个标记,界面就可能发生变化,而基于WEBFROM拖拉出来的控件,经常会生产出一堆的无用的标签导致页面效果达不到预期,为了达到预期目的,反而需要花很多时间了解控件的用法,甚至自己重写控件,这样就失去了原本的意义,开发门槛和开发效率反而没有得到提升。所以ASP.NET MVC就很成了大家希望的新选择了。

但是我想表达的是MVC是一种好的设计思想,但MVC并不等同与ASP.NET MVC,ASP.NET MVC只是官方提供的一种最佳实践的框架。而且MS的技术体系,有时候往往确实前后的连贯性,想想这些年,MS推出了多少新技术,新框架,很多人花了很多时间去学习,最后可能连个像样的DEMO都没有做出来,那个技术,那个框架已经成为过去式了。

ASP.NET MVC只是其中一个,我的观点是MVC依然是一种好的思想和理念,会一直存在和发展下来,但是ASP.NET MVC1到ASP.NET MVC6,未来会走向何方,只有MS才知道,所以如果你计划做一个新项目,无论是选择WEBFROM还是ASP.NET MVC都是可以,那种技术你擅长,你熟悉,能否快速提供给客户一个稳定可用的解决方案,那就是一种好的技术,但是如果你计划研发一个产品,我认为WEBFORM和ASP.NET MVC都不是很好的选择,产品的生存周期往往比较长,而MS的技术更新换代就比较频繁,产品总不能年年都重构,年年换框架吧,且不说需要投入大量的人力时间,还可能引入一堆的BUG。所以如何开发产品,我的观点是既可以使用WEBFORM好的一面(比如后台,用控件的方式,有时候开发效率非常高效的),也会借鉴MVC的优秀思想(在前端,更好的实现代码和界面分离等),但尽量不使用太多的框架,而是自己根据产品的发展和需要,自己去实现,比如MVC,完全可以根据自己的需要,实现一种轻量级的MVC框架。

二,MSSQL OR MYSQL ?

一直以来,.NET + MSSQL基本是标配,开发.NET系统,基本都会搭配使用MSSQL,但自从用了MYSQL之后,我就很少用回MSSQL,不是说MSSQL不好,而是MSSQL太笨重,某些简单的问题,比如分页,MYSQL就非常容易,MSSQL早期版本还需要搞个存储过程来实现,新版本提供了新的语法,但是又无法向下兼容,但是MYSQL在一些复杂的联合查询是没有MSSQL强大的,具体特性我就不去比较了,毕竟每种数据库各有其优缺点,作为一个普通开发者,也没有办法完全去吃透两种数据库的所有特性,以我个人使用的经验,我觉得企业MIS选MSSQL会比较好,而互联网产品,选MYSQL会更好一些,因为轻量,资源友好型。

三,.NET OR .NET Core ?

一直以来,MS的技术只能运行在WIN系统,自从.NET CORE的推出,完全改变了旧有的技术观念,那么.NET CORE是否值得选用,值得期待,我认为:值得!

首先,拥抱更加开放的技术符合时代潮流,多一种选择,总是好事,当然了,如果你是自己开发的产品,自己用,就只跑WIN也没啥不好!

其次,我曾经开发一个搜索产品,基于.NET开发的,我遇到很多潜在客户来咨询,他们的网站是使用PHP,跑在Linux上的,问能否支持Linux,如果从开发产品的角度来说,能支持多一种操作系统,意味着更多的潜在客户。

再次,.NET CORE会不会中途就不了了之,MS的新CEO上台后,MS的发展方向已经很清晰了,WIN的地位已经下降了,公司营收越来越依赖云计算,这说明MS用不着把.NET绑死在WIN上,VS都有MAC版本了,MS已经越来越开放了,不是MS想通了,要开放了,而是开放了能更赚钱,能帮助企业赚钱的方向,企业会放弃,不了了之吗?

总之,对待新技术,新框架,不要做一个宗教式的技术狂热者,而是做一个理性的实用主义者,慎重选择框架类技术,比如WPF,ASP.NET MVC等,积极拥抱大方向,比如.NET CORE。本文只是我个人的思考,欢迎理性讨论!

作为一个.NET开发者,怎么看待和选择层出不穷的新技术,新架构?的更多相关文章

  1. 一个iOS开发者的修真之路

    在微信上有童鞋问我iOS开发者的入门标准是神马?这个问题难到我了,而且贸然给一个答案出来的话,必定会有万千高手来喷. 凡人修仙,仙人修道,道人修真.当我们还是一个在青石板上蹲马步汗水涔涔的废柴时,或许 ...

  2. 来谈谈 WebAssembly 是个啥?为何说它会影响每一个 Web 开发者?

    作者:link 原文:What is WebAssembly and why it affects web developers! 你听说过WebAssembly吗?这是由Google, Micros ...

  3. 一个Js开发者学习Python的第一天

    原文地址:小寒的博客 https://www.dodoblog.cn/blogs/5bf6b8fa0c09883d0f8aad13 作为一个有着足足两年半学习经验和一年半开发经验的js开发者,看着js ...

  4. 一个iOS开发者对tvOS SDK的初探

    http://www.cocoachina.com/ios/20151001/13652.html 作者:Chris Wagner原文地址:tvOS SDK: An iOS Developer’s I ...

  5. 一个.Net程序员:既然选择了编程,只管风雨兼程(转)

    一个.Net程序员:既然选择了编程,只管风雨兼程 一次会议记录是不会有人感兴趣的,做标题党也是不道德的.所以,走了个折衷的路线,标题不叫会议记录, 内容不纯总结,技术加吐槽,经验加总结. 对于一个程序 ...

  6. js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false

    用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...

  7. 每一个web开发者都应该了解的HTTP/2

    我认为每一个 web 开发者都应该对这个支撑了整个 Web 世界的 HTTP 协议有所了解,这样才能帮助你更好的完成开发任务.在这篇文章中,我将讨论什么是 HTTP,它是怎么产生的,它的地位,以及我们 ...

  8. 有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成。

    有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成. 分析:线性表中关于逆序的问题,就是用建立链表的头插法.而本题要求不能建立新 ...

  9. 一个软件开发者的BPM之路

    我是小林,一名普通的软件工程师,从事BPM(业务流程管理)软件开发工作.我没有几十年的技术底蕴,无法像大牛们一样高谈阔论,品评BPM开发之道:也不是资深的流程管理专家,能与大家分析流程管理的时弊.我只 ...

随机推荐

  1. UE4照片级渲染Demo

  2. mysql初始化提示安装perl

    all_db --user=mysql --datadir=/data/mysql", "delta": "0:00:00.222500", &quo ...

  3. 使用GDB调试gp(转载)

    使用 gdb 调试 postgres greenplum zalax3030人评论715人阅读2012-07-11 10:07:15   错误信息的获取途径有几种 :  1. 最简单的就是看Postg ...

  4. Echars鼠标点击事件多次触发

    gChart.on('click', function (params) { if (params.componentSubType == "bar" && par ...

  5. c复杂函数指针

    函数指针,函数的返回值是数组 int *(*(*fun)(int* a, int* b))[]; 上面的代码是声明一个函数指针,这个函数有2个int指针参数,返回值是指针,指向的是数组,数组里放的是i ...

  6. (转)Spring Boot(三):Spring Boot 中 Redis 的使用

    http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html Spring Boot 对常用的数据库支持外,对 Nosql ...

  7. 提高git下载速度(非代理或修改HOST)

    1. 利用开源中国提供的代码仓库 标题已经说的很清楚了,我想对于经常使用git的人来讲,很可能已经知道了.对于新手刚接触git的人来讲,可能你只知道github. 实际上,国内也有很多代码仓库提供方, ...

  8. 深度学习之Attention Model(注意力模型)

    1.Attention Model 概述 深度学习里的Attention model其实模拟的是人脑的注意力模型,举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观 ...

  9. centos7 开机启动服务链接说明

    环境:centos7 创建的开机启动的链接地址: /etc/systemd/system/multi-user.target.wants/ 如: [root@tiaobanji system]# ll ...

  10. zabbix 应用监控作业笔记 ansible-playbook

    目录 目录结构 zabbix-web.yaml zabbix-backup.yaml zabbix-nfs.yaml zabbix-mysql.yaml zabbix-server.yaml zabb ...