基于.Net进行前端开发的技术栈发展路线(三)
前言
上一篇《我的技能树二》文章分享了我的技能中的前端技能和Java技能,今天继续跟大家分享的就是后端技能了。
我的技能树
我当前的技能树:

其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练。未标注的只是了解。
数据库

数据库
数据库是信息化系统编程的基础。因为我一直是做信息化系统的,所以这一块比较熟悉。最初熟悉的数据库是基于PB开发的Sybase,SQL Anywhere,现在已经不流行了。后来转到了SQL Server,再后来转到了Mysql,然后又熟悉了Sqlite。现在常用的数据库是Mysql和Sqlite的组合。这样选择的主要原因还是因为使用的人多,还免费。现在用这两种数据库也基本够用了,Mysql主管理系统端应用,而Sqlite主小型程序应用和Web前端应用。
对数据库的掌握,需要哪些基本知识点呢,我认为这些是必须的:
- 标准SQL语法:掌握SQL语言中的DML,DDL,包括CRUD,多表关联,分组汇总等
- 数据库性能调优:需要掌握对索引的基本理解,通过SQL执行计划对SQL语句进行优化。可以说不懂索引的话,就等于不会数据库编程,这样的系统是无法投入实用的,只是个玩具。
- 数据库管理:初级DBA的一些能力,比如数据库对象的权限管理
ORM
ORM我使用Entity Framework(EF)和Dapper,一个重量级,一个轻量级,适用于各自不同的应用场景。我曾经对是否使用ORM很纠结,因为ORM确实对系统性能是有影响的。但后来我想开了,机器是为人服务的,我们使用ORM的目的,是为了解放人,能够使解放人释放出的红利,能覆盖机器开销增大而增加的成本。这个账,总体是算的过来的,否则ORM就不会流行了。同时,我们也要尽可能好的使用ORM,要细心研究,合理使用,使得ORM对性能的影响在可控的范围内尽量小,如果只做到菜鸟级别的使用,那可能是得不偿失的。
随着ORM的流行,我已经很少直接写SQL了。不过我也不喜欢EntityFramework的导航属性,觉得使用它时限制感比较严重,而且性能问题也比较明显,所以我的个人偏好的方式是,用“写SQL”的方式使用ORM,也就是使用LINQ,既利用了我对SQL熟悉的能力,也用上了LINQ的灵活性。
对于EF和Dapper的选型,我一般是:如果是做的是“产品”,那么使用EF,所以即使它只是一个单机版的小的系统,如果它是产品,我也会用EF+Sqlite来实现。而Dapper用于实现“接口”,比如产品系统要和外部系统对接,外部系统是项目型的,它的模型是不确定的,因此非常适合使用Dapper,一方面在外部接口端直接写SQL,在代码端又能用上对象化编程模型,两端的编程都得到了方便。
Ado.Net
对于传统的Ado.Net的使用,我现在已经不用了。对Ado.Net的了解,我只是在学习C#的时期,作为练手原因写一些demo,现实应用中已经完全没有必要使用它了。和它一起可以彻底淘汰的有:DataTable,DataSet。所以,但我看到还是使用DataTable的同学,我不禁想劝TA:该进步了同学!
设计模式

为什么要学习设计模式呢?其实对我来说,不能叫“学”,而是“了解”设计模式。在了解设计模式之前,我一直是按自己对OOP的本能理解在进行设计和开发。所谓“二十一种设计模式”,“二十四种设计模式”,源头都是来自于Java界。当我看到这些提法就有担心,自己的设计是不是遵循了设计模式的基本原则?有没有可改进的空间?因此觉得需要对设计模式有个全面的了解。
对照看过基本设计模式的书,一方面确实开阔了眼界,另外感觉对自己的实际编程帮助有借鉴,但其实也不大。一个原因是,自己平时的设计中,其实基本遵循了设计的一些原则,和某些设计模式类似。比如:工厂、单例、外观、装饰、组合等,自己下意识的就在用。另外,一些不常用的设计模式,自己其实平时也不会用到,原因可能是自己平时写的不是需要发布的那种第三方的类库,而都是项目的类库。这些类库,都是为了解决现场问题而设计的,而不会为了实际中没有发生的需求而进行预先设计。所以就没有必要精雕细琢,增加当前不需要的设计,这样对要遵循某种设计模式的必要性就降低了。
虽然看过设计模式的书后,现在我在编程过程中,大部分设计模式都不会有意识的去用,都还是凭对OOP的基本理解,代码怎么简洁,怎么容易阅读,怎么方便扩展这些基本原则来考虑,不会强求套用设计模式。我觉得这个思路也是对的。如果做什么设计都要去套用设计模式,可能适得其反,搞出不伦不类的设计架构。不过不管怎么样,不定期的回顾设计模式,将对设计模式的进一步的思考更好的融入到自己平时的设计中去,自己其实做的还不够,也需要加强。
我当前在产品中,用到的设计模式,我能想起来的,可能包括:简单工厂模式,单例,组合,桥接,外观,装饰,代理。
讲到这里,通过总共三篇文章的讲解,我也对我的整个技能进行了梳理,对自己的技能的进一步发展,也有了更清晰的规划,那应该包括:
- 熟悉ionic:掌握包括angular,cordova这些跨平台的前端开发模式
- 应用vue:现在vue越发流行,虽然前端我采用了angular,但可以将vue应用到我的产品后端,将传统的bootstrap+jquery+knockout的技术组合升级为bootstrap+vue的组合。
- 需要一定程度的加强Android下的Java开发,学习IOS下的开发,能开发基于各平台的cordova插件
- 不定期的回顾设计模式,将设计模式的优点内化为自己的能力。
在学习过程中,我在网络上收集过一些学习资料,在经过阅读后也甄选出比较经典的一些资料。有需要的朋友,可以在后台回复关键字“获取技能树”,可获得包括《C#高级编程》第七版,《Java编程思想》第四版,和《大话设计模式》的下载链接。
欢迎关注本人微信公众号,更及时的关注最新文章(每周多篇原创文章,以及多篇专题文章):

扫描二维码关注
基于.Net进行前端开发的技术栈发展路线(三)的更多相关文章
- 基于.Net进行前端开发的技术栈发展路线(二)
前言 上一篇<我的技能树>文章分享了我的技能成长过程,还未完成,今天继续跟大家分享. 01 我的技能树 我的当前的技能树: 其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练.未 ...
- 基于.Net进行前端开发的技术栈发展路线(一)
前言 今天想讲讲的是我的技术树.我最初是做CS开发的,第一阶段的技术经历是以Powerbuilder来做CS开发,第二阶段开始基于C#做winform开发,眼看前端开发越来越流行,需要更广泛的技术栈势 ...
- 网络统计学与web前端开发基础技术
网络统计学与web前端开发基础技术 学习web前端开发基础技术(网页设计)需要了解:HTML.CSS.JavaScript三种语言.下面我们就来了解一下这三门技术在网页设计中的用途: HTML是网页内 ...
- 【web开发】web前端开发常用技术总结归纳
技术选型规范规范 • Vue版本:2.x • 前端路由:vue-route • 异步请求:Axios • 全局状态管理:VueX • css预处理器:sass/less • h5项目移动端适配规则:使 ...
- web前端开发必备技术
1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...
- 装饰器的初识,基于bootstrap的前端开发
1装饰器的初识 概念:不改变函数原来的调用方式,动态地给函数添加功能 开放封闭的原则:1>对添加的新功能是开放的,32>不要在元代码进行修改(封闭) 1.1>函数的定义:对代码块和功 ...
- 快速了解“云原生”(Cloud Native)和前端开发的技术结合点
欢迎访问网易云社区,了解更多网易技术产品运营经验. 后端视角,结合点就是通过前端流控缓解后端的压力,提升系统响应能力. 从一般意义理解,Cloud Native 是后端应用的事情,要搞的是系统解耦.横 ...
- Web前端开发--JS技术大梳理
什么是JS JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语 ...
- 学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言
1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片. ...
随机推荐
- windows系统dos窗口全屏
第一次进入博客园 2017年12月7日 之前使用dos窗口时都输入的是简短的指令,今天突然感觉小框看着不舒服,就找了一下度娘,在这里感谢万能的百度,一鞠躬. 1.win+r打开dos命令窗口 2.cm ...
- 机器学习(九)隐马尔可夫模型HMM
1.隐马尔可夫HMM模型 一个隐马尔可夫模型可以表示为\[\lambda=\{A,B,\pi\}\]具体就不说了,比较基本. 2.HMM模型的三个基本问题 1.概率计算问题:给定\(\lambda\) ...
- mvc根据绝对路径下载文件
首先页面需要一个a标签直接指向下载文件的Action并传值:图片地址,以及图片名称(记住要带后缀名的). 然后是Action里面的代码. SiteHelper.DownloadFile(fileUrl ...
- koa2学习(一)
前期准备: node环境 npm包管理工具 安装Koa npm install --save koa 第一个程序 创建index.js const Koa = require('koa'); cons ...
- 使用 python 实现π的计算
1.π的神奇 π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计算π,也就是计算π的值.因为π是一个无理数,它是无限的.这就意味着任何对π的计算都仅仅是 ...
- Flutter
2015年, Google 内部开始测试另一种高性能的编程方式,那就 Google 的 Sky 项目.Sky 项目使用网页开发语言Dart开发原生Android 应用,强调应用的运行速度和与 Web ...
- Unbuntu 16.04 英文环境安装中文输入法
ubuntu 16.04 使用的是ibus输入系统,没有预装中文输入法,你要自己安装一下.以中文拼音输入法为例:1.sudo apt install ibus-pinyin2.sudo apt ins ...
- Puppeteer: 更友好的 Headless Chrome Node API
很早很早之前,前端就有了对 headless 浏览器的需求,最多的应用场景有两个 UI 自动化测试:摆脱手工浏览点击页面确认功能模式 爬虫:解决页面内容异步加载等问题 也就有了很多杰出的实现,前端经常 ...
- 基础:新建个maven项目
首先在电脑上配置好Maven环境 第一步:在Eclipse中选择创建Maven Project Next Next Finish 创建好后项目结构如下: 第二步:讲项目转为Web项目,右键项目点击pr ...
- Python函数声明以及与其他编程语言数据类型的比较
1.函数声明 与其它大多数语言一样 Python 有函数,但是它没有像 C++ 一样的独立的头文件:或者像 Pascal 一样的分离的 interface / implementation 段.在需 ...