一种语言就可以轻松搞定前后端+安卓端+ios端+web , 等等 , 此时学习还给你送一个桌面端~~~听起来是不是很酷很骚跃跃欲试~!! 走起~
这篇文章主要是推荐一个dart开发服务器的思路 ,
如果你已经会用flutter开发app ,
如果你想尝试做后端服务器和接口开发 ,
如果你想极大提高一个人的全栈开发效率 ,
那么看到这篇文章对你或许有启发.并介绍我在过程中对项目的理解 , 主要给大家介绍几点:
- 为什么想尝试dart服务端?
- 为什么推荐dart_mars?
- dart_mars给的思路和启示
- 不足之处
一、为什么想尝试dart服务端?
本人之前一直在做移动端为主 , 项目集中在android社交和toB的产品 , 虽然研究过以前项目的服务端(php和java甚至.net 均有) , 但是一直对于服务端的系统性学习还停留在大学那会的shh. 此处一直是短板.
后来有一些自己想做的小型app, 受制于服务端的短板 , 我只能选择bmob这种第三方服务器做开发 , 实际效果并不理想 .
20年3月份开始转入flutter开发 , 发现 dart 也是可以作为服务器开发语言的 , 一直也在逛各种论坛 ,却发现这方面的文档少得可怜 , 更不要说开源框架那些 .
直到21年7月份 , 看到了大佬的dart_mars, 瞬间觉得打开了一座宝库的大门~~~~
除了dart统一语言的好处 ,我认为dart_mars:
- 本身文档清晰齐全(至少文档框架上是齐全的) ;
- 代码质量也很不错 ;
- 提供了命令式安装脚手架 , 其中包括了大部分的常用基类 , 代码非常简洁
- 作者汤大佬不仅技术牛逼 , 人也很风趣友善 ,毫不吝惜为源码解惑 , 他的文风 也是很好玩的:
上面提到 , dart_mars提供了很好的dart服务端思路 , 主要体现在项目脚手架 、模板脚手架、以及功能划分这几方面
我们先结合源码来看项目脚手架 , 首先看看项目入口
可以看到在项目入口处 , 提供了 常用的几个命令行 , 分别执行创建项目 , 运行项目 , 编译项目等 (当然这里你也可以很方便的扩展你的方法) , 这里为我们扩展项目命令提供了环境 ;
具体创建或者运行项目的代码 , 都在各自的helper内 ,以创建CreateHelper为例 , 继续看代码
class CreateHelper {static Map fileMap = {/// readme'README.md': '# {package}',这里省略若干脚手架代码/// tests'lib/tests/test_main.dart': '''
void main(){print('you can do some test in here');
}''',};static void run(String package) {var path = Directory.current.path.replaceAll('\\', '/');var project = path + '/' + package;if (!Directory(project).existsSync()) {Directory(project).createSync();} else {print('dir ' +package +' is already exists, please chose other or delete it then try again');return;}fileMap.forEach((filePath, fileContent) {var filePathArr = filePath.split('/');for (var i = 0; i }
创建里面通过 path-content的模式 , 直接生成了模板项目的文件和内容 , 是不是简单粗暴~~
每一个content 就是实际执行出来的代码拉~
例如 Pubspec.dart 的content
class Pubspec {static String content = '''
name: {package}
environment:sdk: &#39;>&#61;2.10.0 <3.0.0&#39;
dependencies:yaml: 3.1.0mysql1: 0.19.2redis: 2.0.0mime: 1.0.0encrypt: 5.0.1
&#39;&#39;&#39;;
}
我们默认生成项目的模板就是template目录下的所有文件拉
这里已有的模板是汤大佬写的 , 当然我们也可以在这里根据需要修改他的模板content或者生成我们的模板 , 超简单啊 .
我们再来看看生成项目后 , 项目内的控制模板 , 也就是controller-model-service模板 , 先上代码
class TemplateHelper {String packageName;bool forceWrite &#61; false;TemplateHelper({this.packageName, this.forceWrite});void run(List list) {list.forEach((fileInfo) {_createModelFile(fileInfo);_createServiceFile(fileInfo);fileInfo.controllerFileNameList.forEach((controllerFileName) {_createControllerFile(fileInfo, controllerFileName);});});}void _createModelFile(TemplateInfo fileInfo) {创建model,dart}void _createServiceFile(TemplateInfo fileInfo) {创建service,dart}void _createControllerFile(TemplateInfo fileInfo, String controllerFileName) {创建controller,dart}class TemplateInfo {这里省略若干模板代码
}class TemplateContent {这里省略若干内容代码}&#39;&#39;&#39;;static String serviceContent &#61; &#39;&#39;&#39;这里省略若干脚手架代码&#39;&#39;&#39;;static String controllerContent &#61; &#39;&#39;&#39;这里省略若干脚手架代码&#39;&#39;&#39;;
}
调用:
TemplateInfo(tableName: &#39;comment&#39;,keyName: &#39;commentId&#39;,modelFile: &#39;../extend/model/Comment.dart&#39;,serviceFile: &#39;../extend/service/CommentService.dart&#39;,controllerFileNameList: [&#39;../app/open/controller/CommentController.dart&#39;,&#39;../app/user/controller/CommentController.dart&#39;,&#39;../app/admin/controller/CommentController.dart&#39;,],)TemplateHelper helper &#61; TemplateHelper(packageName: &#39;community&#39;);helper.run([TemplateInfo]);
可以看到 , 想要创建modle 和service , controller是非常方便的 , 配置一个文件TemplateInfo即可 , 是不是非常方便~~ PS:这里还可以结合flutter本身的模板几个字母就快速生成上面代码喔
最后我们在看看功能划分吧
首先dart_mars , 非常简单 , 就是入口文件&#43;helper&#43;模板,
然后项目下面:
是不是一目了然非常清晰 .
最后附一下darmars的地址
四、不足之处
1.目前看, 受制于dart生态 , 可能各种第三方插件兼容不会那么好 , 但是作为普通开发者做常用小项目的服务端是完全够用的 .
2. 对服务器的各种压测还是有待研究的 , 另外文档还有些地方没写完 ;
3.大佬项目如果有web管理后台的基础功能 ,就更好拉~
这些都是小问题了 , 相信dart_mars的思路会给大家很好的服务端开发启示~
以上是我研究几天下来对于dart_mars的了解, 我希望基于dart_mars现在的基础 , 花几个月打磨出更适合自己的基础服务器框架 , 以填补自己的服务端短板 , 再往后完善对应的app 和管理后台
希望今年有1个较好的社交demo或者博客demo出来 , 明年有机会尝试研究一下一件生成前后端 , 酷酷酷
最后附地址
源码在此
文档在此