基于.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插件

不定期的回顾设计模式,将设计模式的优点内化为自己的能力。

觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习进步。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190118G15OK700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券