基于.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样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片. ...
随机推荐
- 移动端h5 实现多个音频播放
前一段时间做到一个项目,其中用到很多之前没用过的东西,其中一个就是h5的多音频实现,背景音频和说话同时播放,其中出现了很多问题,不过总算找到了解决方案. 平时做H5如果只有一个音乐的话就直接在页面里面 ...
- ubuntu 14.04 安装 rabbitmq
1. sudo apt-get update 安装rabbitmq 2. sudo apt-get install rabbitmq-server 添加用户 3. sudo rabbitmqctl a ...
- ionic3+angular4开发混合app 之自定义组件
这里主要是记录ionic3+angular4开发混合app时自定义组件,我想自定义组件的方法和angular4应该类似,具体在纯angular4中自定义组件,暂时没有实践,个人觉得差别不大,之后实践了 ...
- List使用linq的OrderBy方法排序,并按照两个字段排序的写法
SfaMember.GetList(searchInfo, 0, 1000, out Allcount).Where(item => item.bOpen == true).OrderBy(it ...
- 关于部署php遇到的坑
业务突然要启动一个久不使用的PHP项目, 发现部署到centos7上后 各种报错 就是不行. 我怀疑是apache或者php问题 就重新安装 编译安装也试过就是不行. 只能按笨办法 在测试环境安装了a ...
- position属性sticky和fixed的区别比较
position属性之fixed fixed总是以body为定位时的对象,总是根据浏览器窗口来进行元素的定位,通过left,right,top,bottom属性进行定位. <!DOCTYPE h ...
- 数据安全存放,全民搭建kodexplorer私有云存储
数据安全存放可以说越来的重要,新闻上也经常报道出关于个人信息泄露的事件,不仅泄露,还有一些进行个人隐私买卖,之前报道出facebook便是如此.数字信息存放好比存钱一样,存在别人那里总会不放心.不如自 ...
- 基于vue-cli配置移动端自适应
移动端自适应:手淘的 lib-flexible + rem 配置 flexible 安装 lib-flexible 在命令行中运行如下安装: 1 npm i lib-flexible --save 引 ...
- vue图片上传到七牛云
代码: <template> <div class="upload-info"> <div> <el-upload class=" ...
- centos7 mysql自动备份
MySQL自动备份shell脚本 在数据库的日常维护工作中,除了保证业务的正常运行以外,就是要对数据库进行备份,以免造成数据库的丢失,从而给企业带来重大经济损失.通常备份可以按照备份时数据库状态分 ...