先做个自我介绍,我是 2015 年大四实习开始学习的 .net,如果从 2016 年毕业开始算,到目前为止已有 5 年的 web 开发相关经验了,自认为并不是技术很厉害的人,但是也有一点个人的经验,希望能够帮助到其他人。

能脱坑就尽快吧

对于 web 开发,我想要简单对比下 c#、java、go 这三门语言,主要是个人稍微比较了解并不代表其他语言不适合于做 web 开发。三门语言的各方面对比相信网上都有很多相关的文章,在此不再赘述,主要想表达一些比较主观的个人观点。

go 语言个人认为是一门比较现代化的语言,无论是从语法上还是从设计上都感觉比其他语言来得简洁。

  • 错误处理:conent,err:=ioutil.ReadFile("filepath")

    c#、java 的错误处理方式都是需要通过 try catch 来捕获,但是 go 只需要在有可能报错的方法后增加一个 err 变量。虽然 c# 可以使用在方法内部 try catch,然后使用 tuple 封装错误的方式来实现类似的效果,但使用起来始终没有 go 这么优雅。

    public static (string, Exception) ToJson(this object obj)
    {
    if (obj == null)
    {
    return (string.Empty, new ArgumentNullException(nameof(obj)));
    } try
    {
    return (JsonConvert.SerializeObject(obj), null);
    }
    catch (Exception e)
    {
    return (string.Empty, e);
    }
    } var (json, e) = obj.ToJson();

    顺带一提: V 语言的错误处理是我认为目前为止最简洁的方案,但目前这门语言仍在开发中。

    fn (r Repo) find_user_by_id(id int) ?User {
    for user in r.users {
    if user.id == id {
    // V automatically wraps this into an option type
    return user
    }
    }
    return error('User $id not found')
    } user := repo.find_user_by_id(10) or { // Option types must be handled by `or` blocks
    return
    }
  • 启动多线程(协程)的方式

    go 启动协程的方式特别简洁且优雅 go function(),虽然 c# 也可以很快创建线程 Task.Run(Function),但 go 的这种设计还是更加让我喜欢。

  • channel 的设计

    channel 是一种用于在协程之间相互通信的技术,这让我想到了大学开发安卓时 UI 线程与子线程的通信,显而易见,channel 更加的简洁、优雅。

而 c# 与 java 之间,大部分人都会觉得这两门语言比较相似,优缺点大概就是 C# 语法糖比较多开发比较快,java 社区庞大类库多开发也很快,优点在此不多赘述,个人认为 .net 类库没有 java 丰富,目前 java 的 web 开发基本离不开 spring,而 spring 个人认为有点过度设计。

除了以上说到的一点浅显的对比,还有很关键的一点就是就业市场,以下是我在拉勾网上的搜索结果。





很明显,.net 如今的就业市场是无法与 java 相比的,而 go 作为后来者在上海也已经快赶超 .net 了,基于以上种种,个人建议对于已经使用 C# 作为工作语言多年的人,可以继续深入学习,尽管就业市场并不乐观。对于刚入坑不久的人,建议可以了解一下其他语言,尽快脱坑。

一点小建议

对于往后还将从事 .net 开发的人,我有一点小小的建议,希望能对你有所帮助。

尽可能少用第三方框架

个人建议在开发中尽可能少去使用各种第三方框架,并不是说第三方框架不够优秀。

  • 官方框架已足够优秀

    这边说的是 asp.net core,对于 .net framework 以及 MVC 不再做评价,因为这些技术已不再是主流。从 asp.net core 1.0 开始,.net 开发团队就热衷于使用 owin 的启动方式,类似于 app.Start<Startup>(); 然后在 Startup 中去做各种各样的配置,这点只是个人观察所得,并没有看到官方有此类描述。这种服务启动方式,比过去的 asp.net 项目更加直观清晰,反正让我感觉很舒适。此外,asp.net core 的依赖注入也是个特别好的设计,对象统一在 Startup.ConfigServices 注册,并且只通过构造函数注入,这可以很好地规范项目代码。

  • 第三方框架可能说没就没

    15 年刚开始学习 .net 的时候,发现了一个三方框架叫 Nancy,当时感觉这个框架比官方的 MVC 框架优雅多了,然而万万没想到的是,这么多星的一个仓库现在已经不再维护了。可能有些人会觉得反正只要不出 bug、项目足够稳定就可以,但是项目不再维护意味着框架不再会有新功能,将来某个时刻发现框架已难以满足开发需求,那时候就只能重构迁移至其他框架了。

    我现在维护的一个老项目就使用了一个很老的第三方开发框架,现在去搜索已经找不到代码库了,博客园上有一点相关的文章,giee 上似乎有这个框架的私有库,也不知道当时这个框架是怎么弄到手的,反正现在就只有几个 dll,出 bug 了要看源码只能反编译,而恰好还真被我发现了一些 bug。对于这种不开源、维护状态未知的框架,都有人敢使用,我是佩服他的勇气的。强烈建议,千万不要在工作中随便使用什么乱七八糟的第三方框架。

自建项目模板

也许有人会说用第三方框架能快速开发,项目能够更快地上线,但是个人认为那种所谓"开箱即用"的开发框架都属于过度设计,将许多东西都揉在一个项目里面,然后还在框架中加入了很多具有个人特色的开发习惯,比如DDD。若为了能达到快速开发,其实每个人都通过为自己建立一个项目模板而轻松达到这个目的。

将自己常用的一些组件以及对组件的适当封装都写到项目模板中,在下次需要新建项目的时候,直接基于此项目模板就可以快速继承自己积年累月总结出来的一套最适合自己的开发模式。我个人就在 github 上维护了一个自己的项目模板,如果你觉得这种方式可行的话,可以参考官方文档以及我的模板去搭建一个自己的项目模板。

最后

以上所有内容都是比较主观的观点,若有不对之处,还请指出,望多多包涵。邮箱:venyowong@163.com

.net 经验总结的更多相关文章

  1. 移动硬盘不能识别的常见7种解决方案 ~ By 逆天经验

    服务器汇总:http://www.cnblogs.com/dunitian/p/4822808.html#iis 服务器异常: http://www.cnblogs.com/dunitian/p/45 ...

  2. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  3. iOS架构一个中型普通App的一些经验总结

    这一版比较完善的的App终于提交审核了.有时间写写自己的一些经验的总结了.自己主导的从0到比较成型的app到目前来说也只有两个,但是其中的很多东西都是大同小异.基本上是想到了什么就写什么,感觉写的不到 ...

  4. 从史上八大MySQL事故中学到的经验

    本文列举了史上八大MySQL宕机事件原因.影响以及人们从中学到的经验,文中用地震级数来类比宕机事件的严重性和后果,排在最严重层级前两位的是由于亚马逊AWS宕机故障(相当于地震十级和九级). 一.Per ...

  5. CentOS上 Mono 3.2.8运行ASP.NET MVC4经验

    周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...

  6. 【腾讯Bugly经验分享】程序员的成长离不开哪些软技能?

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ce8068d4d44a246f72baf2 Dev Club 是一个交流移动 ...

  7. CI Weekly #6 | 再谈 Docker / CI / CD 实践经验

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  8. C#异常处理经验(原则与方法)

         本文是异常处理经验性的文章,其实跟C#关系也不大.比较适合刚刚熟悉异常语法,而缺乏实战的读者.当然,经验老练的读者也可指出不足.给予意见.补充说明,一起完善文章,分享更多知识与经验.   1 ...

  9. 【原创经验分享】JQuery(Ajax)调用WCF服务

    最近在学习这个WCF,由于刚开始学 不久,发现网上的一些WCF教程都比较简单,感觉功能跟WebService没什么特别大的区别,但是看网上的介绍,就说WCF比WebService牛逼多少多少,反正我刚 ...

  10. 千回百折:百度Java研发offer斩获记和经验分享

    起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...

随机推荐

  1. vue SCSS

        C:\eclipse\wks\vue\esql-ui>node -v v12.18.1 C:\eclipse\wks\vue\esql-ui>npm -v 6.14.5 直接修改p ...

  2. JAVA序列化浅析

    java.io.Serializable浅析 Java API中java.io.Serializable接口源码: 1 public interface Serializable { 2 } 类通过实 ...

  3. 通过Shell统计PV和UV

    PV.UV是网站分析中最基础.最常见的指标.PV即PageView,网站浏览量,指页面的浏览次数,用以衡量网站用户访问的网页数量.用户没打开一个页面便记录1次PV,多次打开同一页面则浏览量累计:UV即 ...

  4. 图书管理系统总结——JAVA Swing控件简介

    断断续续学习JAVA语言,写了一个多月数据库大作业,终于在五一过后写完了.由于第一次使用JAVA和数据库,遇到了许多问题,记录下来,以备以后查看. 我使用的JAVA SE,说实话,在开发后期,觉得JA ...

  5. 前端两大框架 vue 和 react 的区别

    1. 设计思想 vue: vue的官网介绍说vue是一种渐进式框架,采用自底向上增量开发的设计: react: 采用函数式编程,推崇纯组件,数据不可变,单向数据流: 2. 编写语法 vue: 采用单文 ...

  6. eclips 配置一个tomcat,启动多个不同端口的web项目

    前提: 记录这个文章是因为在网上查资料,很多都是,用eclips.配置多个tomcat,就像下面图这样配置两个tomcat 去启动不同的web: 运动多个web 项目,设置不同的端口,需要多个tomc ...

  7. c3p0的使用步骤

    //1.导入c3p0的连个包,和mysql的驱动包//2.配置c3p0.xml的配置文件 <c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <d ...

  8. 【Matlab】imagesc的使用

    imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色 imagesc(x,y,A) x,y决定坐标范围 x,y应是两个二维向量,即x=[x1 x2],y= ...

  9. 数据恢复binlog2sql

    目录 一.原理及其使用 用途 闪回原理简析 binlog 有三种可选的格式: 来实例演习下来实例演习下 二.准备工作 一.原理及其使用 生产上误删数据.误改数据的现象也是时常发生的现象,作为运维这时候 ...

  10. <转>git,github在windows上的搭建

    http://www.cnblogs.com/yixiaoyang/archive/2012/01/06/2314190.html Git在源码管理领域目前占很大的比重了,而且开源的项目很多都转到Gi ...