经常在一些技术社区看到这些的问题,一个.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. SQL 中用户定义函数的使用方法

    --用户定义函数的分类: /* 1.标量函数 2.表值函数 2.1内联表值函数  返回单个SELECT语句, 它没有相关的返回变量和函数体 2.2多语句表值函数  是视图和存储过程的结合 可嵌套 */ ...

  2. 远程连接MySQL数据库问题总结

    远程连接MySQL数据库时,陆陆续续遇到了一些杂七杂八的问题,相信很多人也曾经遇到过这类问题,下面总结归纳在下面,方便以后直接查找. 1:出现ERROR 2003 (HY000): Can't con ...

  3. Java常考面试题(经典)

    什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计 ...

  4. nodejs 第一天

    一.nodejs 安装 略过 二.IDE :webstorm(汉化) 三.nodejs 和 js 的区别 1.在ECMAScript 部分node和js 是一样的,比如数据类型的定义,语法结构,内置对 ...

  5. 深入了解IOC

    老师在简书写的一篇博客 https://www.jianshu.com/p/79f8331e1f24

  6. python中装饰器的原理

    装饰器这玩意挺有用,当时感觉各种绕,现在终于绕明白了,俺滴个大爷,还是要慢慢思考才能买明白各种的真谛,没事就来绕一绕 def outer(func): def inner(): print(" ...

  7. 利用uWSGI和nginx进行服务器部署

    搭建服务器虚拟环境 1)在本机进入虚拟环境,执行命令导出当前需要的所有包. pip freeze > plist.txt 2)通过ftp软件将项目代码和plist.txt文件上传到服务器. 3) ...

  8. June 7. 2018 Week 23rd Thursday

    Half is worse than none at all. 一知半解比一无所知更痛苦. From Westworld. If we go looking for the truth, get th ...

  9. Java虚拟机(Java Virtual Machine)

    JVM(Java Virtual Machine),Java虚机机,是JDK最底层的东西.只要能将源代码编译成字节码(.class)文件,就可以由JVM在不同平台上解释成机器指令来执行.所以,Java ...

  10. Scrapy 框架 总结

    总结: 1.中间件:下载中间件(拦截请求和响应) - process_request: - prceess_response: - process_exception: - 请求: - UA伪装: - ...