不吹不黑,跨平台框架AspNetCore开发实践杂谈

不吹不黑,跨平台框架AspNetCore开发实践杂谈

最近边学边做,初步上手了AspNetCore的开发,对MVC这套熟悉了一下,因为之前没有拿来做过独立项目,都是和别人合作开发,所以前后端分离,我都只做WebApi,而且还是很小的项目(课设级别),生产环境用最多的应该是Python的Django框架,这次我把一个之前做的Django项目用AspNetCore重写一遍,性能提升了不少,C#的性能真不是盖的,AspNetCore这个框架的性能也很不错,榜上有名的(WebApi),虽然MVC排不上名,但是性能依旧甩Django很多,Django每次上线前就做各种性能优化,恐怖,不过性能太好也不行,等会公司觉得工作量不饱和(逃)

ok,既然是杂谈,那也不用把条理梳理得很清楚,我随意列几个方面对比其他框架(Django和Spring之类)聊一聊~
由于我是初学者,对各种概念的理解可能有偏差的地方请各位大佬指正,也欢迎大家一起交流哈哈

依赖注入

不吹不黑,跨平台框架AspNetCore开发实践杂谈

对于写习惯Django的我来说,依赖注入以前是很少用到的,刚刚搜了一下,发现Stack Overflow上有一个讨论(Why is IoC / DI not common in Python?)说得不错,给我扫盲了一下,传送门:https://stackoverflow.com/questions/2461702/why-is-ioc-di-not-common-in-python

Python的模块是天生单例模式的,比起Java这种甚至单例模式有多少种实现方式都能进面试题的语言,不知道高到哪里去了,C#好很多,有静态类,不过在开发中还是会以Singleton模式注册到IoC容器中来实现单例~

依赖注入有个很形象的类比,就是把静态语言当成动态脚本语言来用:启动时把一堆东西丢进去IoC容器里,等到要用的时候告诉容器要给你什么,容器就帮你生成,而在容器里面的这堆东西又可以导入别的依赖,这样层层下来相互依赖,如果框架运行过程出问题的话排查起来很痛苦hhh,还要注意避免因为设计问题导致循环依赖等各类问题,所以感觉Django在设计上还是好,生产力是真的高,其他Web框架用得少,除了AspNetCore和Django这些,就用了传统的Spring、Beego和其他小众语言的MVC框架(我甚至用过dart写后台,然并卵),有时间试试新兴的的Vert.x、WebFlux这类,应该会比较好玩~

就这个IoC和DI来说AspNetCore和Spring差不多,功能上差不多,使用方法也差不多,hhh,不过写起来肯定是不如Python畅快的,不过为啥我还要用AspNetCore这种东西呢,因为静态类型语言写起来爽呀,Drf写接口特别快,但是写起来基本靠猜,哈哈哈,感觉这个形容很贴切。最近有个FastApi的看起来不错,据说是100%的类型注解,可以把Python当成静态类型语言来写,但是这种框架太新了,没有经过市场的验证,很难在生产环境用上…

ORM

不吹不黑,跨平台框架AspNetCore开发实践杂谈

数据库操作是现在Web框架的核心(误?),我也不知道,反正Web开发基本就是CRUD,整天和数据库打交道是没错的,所以ORM很重要,设计合理好用的ORM可以减少很多工作量,Django为啥受欢迎一大原因就是它的ORM很强大很好用,这应该也是动态语言的优势之一吧。

.NetCore平台上的其他ORM我只用过EF Core和Chloe(官网:https://github.com/shuxinqin/Chloe),这个Chloe也是一个国产ORM,用起来蛮方便的,但是不支持数据库迁移,没办法根据代码生成数据库表,这点还是有点不爽的。EFCore是微软官方的ORM,自然是好用,支持数据库迁移,这个就很方便了,然后其他特点我也总结不出来,因为用得不深,没啥特别的体会。

这次项目我选的ORM是国产的FreeSQL,原因是偶然间在博客园看到作者王婆卖瓜的文章,觉得还不错,然后就拿来用一用,确实挺好用的,可以很轻量一句话完成数据库连接建立,也可以像EFCore那样有各种丰富的功能,而且也支持DB First,这个就很舒服了,这次因为是把Django项目迁移到AspNetCore,所以我打算先用原来的数据库试试看,然后FreeSQL一通DB First之后居然美滋滋的可以用,就更坚定了要继续用下去的信心,哈哈(虽然后面遇到了很多坑,大多是关于多对多关系的,被DjangoORM惯坏了)

FreeSQL官网文档:https://github.com/dotnetcore/FreeSql/wiki

体验下来,FreeSQL对外键(一对多、多对一)、多对多、一对一关系的处理方式还是可以的,通过「导航属性」,跟EFCore应该差不多,但是定义Model的时候如果有外键,还有多定义一个字段存Id,这点感觉有点反人类了,EFCore不用,直接引用对象即可,迁移之后反映到表里就是一个外键Id,不过这个FreeSQL是软外键,引用归引用,关系全都在代码里面处理,不在数据库里面生成外键,这个也有它的好处,甚至可以说是一个优势了,有时候维护表的完整性约束有点麻烦hhh

参考文章:.NET ORM 导航属性到底可以解决什么问题?https://www.cnblogs.com/kellynic/p/13575053.html

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssjsj.html