作为一个.NET开发者,怎么看待和选择层出不穷的新技术,新架构?
经常在一些技术社区看到这些的问题,一个.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开发者,怎么看待和选择层出不穷的新技术,新架构?的更多相关文章
- 一个iOS开发者的修真之路
在微信上有童鞋问我iOS开发者的入门标准是神马?这个问题难到我了,而且贸然给一个答案出来的话,必定会有万千高手来喷. 凡人修仙,仙人修道,道人修真.当我们还是一个在青石板上蹲马步汗水涔涔的废柴时,或许 ...
- 来谈谈 WebAssembly 是个啥?为何说它会影响每一个 Web 开发者?
作者:link 原文:What is WebAssembly and why it affects web developers! 你听说过WebAssembly吗?这是由Google, Micros ...
- 一个Js开发者学习Python的第一天
原文地址:小寒的博客 https://www.dodoblog.cn/blogs/5bf6b8fa0c09883d0f8aad13 作为一个有着足足两年半学习经验和一年半开发经验的js开发者,看着js ...
- 一个iOS开发者对tvOS SDK的初探
http://www.cocoachina.com/ios/20151001/13652.html 作者:Chris Wagner原文地址:tvOS SDK: An iOS Developer’s I ...
- 一个.Net程序员:既然选择了编程,只管风雨兼程(转)
一个.Net程序员:既然选择了编程,只管风雨兼程 一次会议记录是不会有人感兴趣的,做标题党也是不道德的.所以,走了个折衷的路线,标题不叫会议记录, 内容不纯总结,技术加吐槽,经验加总结. 对于一个程序 ...
- js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false
用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...
- 每一个web开发者都应该了解的HTTP/2
我认为每一个 web 开发者都应该对这个支撑了整个 Web 世界的 HTTP 协议有所了解,这样才能帮助你更好的完成开发任务.在这篇文章中,我将讨论什么是 HTTP,它是怎么产生的,它的地位,以及我们 ...
- 有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成。
有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成. 分析:线性表中关于逆序的问题,就是用建立链表的头插法.而本题要求不能建立新 ...
- 一个软件开发者的BPM之路
我是小林,一名普通的软件工程师,从事BPM(业务流程管理)软件开发工作.我没有几十年的技术底蕴,无法像大牛们一样高谈阔论,品评BPM开发之道:也不是资深的流程管理专家,能与大家分析流程管理的时弊.我只 ...
随机推荐
- DAY4(python)打印字符串以及增删改查
用while循环打印字符串 #if i in s: # print ( i ) s='nanfjkhndaol' index = 0 while 1 : print (s[index]) index+ ...
- Java中线程的同步问题
在生活中我们时常会遇到同步的问题,而且大多数的实际问题都是线程的同步问题 我这里以生活中的火车售票来进行举例: 假设现在我们总共有1000张票要进行出售,共有10个出售点,那么当售票到最后只有一张票时 ...
- bootstrap-paginator分页示例 源码 MVC
准备 1.数据:bootstrap包(含分页插件bootstrap-paginator.js) 2.技术方案:ajax动态加载分页.部分视图.BLL取数 代码 模板页 @{ Layout = null ...
- django 下载文件
方法一. from django.http import StreamingHttpResponse def big_file_download(request): # do something... ...
- SqlServer执行Insert命令同时判断目标表中是否存在目标数据
针对于已查询出数据结果, 且在程序中执行Sql命令, 而非数据库中的存储过程 INSERT INTO TableName (Column1, Column2, Column3, Column4, Co ...
- 磁盘测试工具FIO工具安装和使用方法
一.FIO工具安装: 1.查看fio是否安装 [root@localhost /]#rpm –qa|grep fio 2.源码安装(推荐) 官网地址:http://freecode.com/proje ...
- 利用uWSGI和nginx进行服务器部署
搭建服务器虚拟环境 1)在本机进入虚拟环境,执行命令导出当前需要的所有包. pip freeze > plist.txt 2)通过ftp软件将项目代码和plist.txt文件上传到服务器. 3) ...
- CentOS更换源
这里介绍如何把CentOS默认镜像源更换为阿里云镜像源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.r ...
- Ubuntu 普通用户无法启动Google chrome
删除 /home/你的用户名/.config/google-chrome文件,再打开就好了 root@ecos:cd /home/ecos/.config root@ecos:~/.config# r ...
- 分布式消息中间件rocketmq的原理与实践
RocketMQ作为阿里开源的一款高性能.高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的? 关键特性以及其实现原理 一.顺序消息 消息有序指的是 ...