IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 《Flutter进阶》用dart搭建服务端:dart_mars框架研究 -> 正文阅读

[移动开发]《Flutter进阶》用dart搭建服务端:dart_mars框架研究

一种语言就可以轻松搞定前后端+安卓端+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_mars?

除了dart统一语言的好处 ,我认为dart_mars:

  1. 本身文档清晰齐全(至少文档框架上是齐全的) ;
  2. 代码质量也很不错 ;
  3. 提供了命令式安装脚手架 , 其中包括了大部分的常用基类 , 代码非常简洁
    在这里插入图片描述
  4. 作者汤大佬不仅技术牛逼 , 人也很风趣友善 ,毫不吝惜为源码解惑 , 他的文风 也是很好玩的:

在这里插入图片描述

  • 三、dart_mars给的思路和启示

上面提到 , dart_mars提供了很好的dart服务端思路 , 主要体现在项目脚手架 、模板脚手架、以及功能划分这几方面

我们先结合源码来看项目脚手架 , 首先看看项目入口
在这里插入图片描述
可以看到在项目入口处 , 提供了 常用的几个命令行 , 分别执行创建项目 , 运行项目 , 编译项目等 (当然这里你也可以很方便的扩展你的方法) , 这里为我们扩展项目命令提供了环境 ;

具体创建或者运行项目的代码 , 都在各自的helper内 ,以创建CreateHelper为例 , 继续看代码

class CreateHelper {
  static Map<String, String> 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 < filePathArr.length; i++) {
        var path = project + '/' + filePathArr.getRange(0, i + 1).join('/');
        path = path.replaceAll('{package}', package);
        fileContent = fileContent.replaceAll('{package}', package);
        fileContent =
            fileContent.replaceAll('{time}', DateTime.now().toString());

        if (!path.contains('.')) {
          var directory = Directory(path);
          if (!Directory(path).existsSync()) directory.createSync();
        } else {
          var file = File(path);
          if (!file.existsSync()) file.createSync();
          file.writeAsStringSync(fileContent);
        }
      }
    });

    print('project ' + package + ' has been created');
    print('you can change dir with command: cd ' + package);
    print(
        'and then get dependent with command: dart pub global run dart_mars --get');
    print(
        'and then start it with command: dart pub global run dart_mars --serve dev');
  }
}

创建里面通过 path-content的模式 , 直接生成了模板项目的文件和内容 , 是不是简单粗暴~~
每一个content 就是实际执行出来的代码拉~
例如 Pubspec.dart 的content

class Pubspec {
  static String content = '''
name: {package}
environment:
  sdk: '>=2.10.0 <3.0.0'
dependencies:
  yaml: 3.1.0
  mysql1: 0.19.2
  redis: 2.0.0
  mime: 1.0.0
  encrypt: 5.0.1
''';
}

我们默认生成项目的模板就是template目录下的所有文件拉
在这里插入图片描述

这里已有的模板是汤大佬写的 , 当然我们也可以在这里根据需要修改他的模板content或者生成我们的模板 , 超简单啊 .

我们再来看看生成项目后 , 项目内的控制模板 , 也就是controller-model-service模板 , 先上代码

class TemplateHelper {
  String packageName;
  bool forceWrite = false;

  TemplateHelper({this.packageName, this.forceWrite});

  void run(List<TemplateInfo> 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 {
    这里省略若干内容代码
    }

''';

  static String serviceContent = '''
    这里省略若干脚手架代码
  ''';

  static String controllerContent = '''
  这里省略若干脚手架代码
  ''';
}

调用:

TemplateInfo(
      tableName: 'comment',
      keyName: 'commentId',
      modelFile: '../extend/model/Comment.dart',
      serviceFile: '../extend/service/CommentService.dart',
      controllerFileNameList: [
        '../app/open/controller/CommentController.dart',
        '../app/user/controller/CommentController.dart',
        '../app/admin/controller/CommentController.dart',
      ],
    )
    
 TemplateHelper helper = TemplateHelper(packageName: 'community');
  helper.run([TemplateInfo]);

可以看到 , 想要创建modle 和service , controller是非常方便的 , 配置一个文件TemplateInfo即可 , 是不是非常方便~~ PS:这里还可以结合flutter本身的模板几个字母就快速生成上面代码喔

最后我们在看看功能划分
首先dart_mars , 非常简单 , 就是入口文件+helper+模板,
在这里插入图片描述
然后项目下面:
在这里插入图片描述
是不是一目了然非常清晰 .
最后附一下darmars的地址

四、不足之处
1.目前看, 受制于dart生态 , 可能各种第三方插件兼容不会那么好 , 但是作为普通开发者做常用小项目的服务端是完全够用的 .
2. 对服务器的各种压测还是有待研究的 , 另外文档还有些地方没写完 ;
3.大佬项目如果有web管理后台的基础功能 ,就更好拉~

这些都是小问题了 , 相信dart_mars的思路会给大家很好的服务端开发启示~

以上是我研究几天下来对于dart_mars的了解, 我希望基于dart_mars现在的基础 , 花几个月打磨出更适合自己的基础服务器框架 , 以填补自己的服务端短板 , 再往后完善对应的app 和管理后台

希望今年有1个较好的社交demo或者博客demo出来 , 明年有机会尝试研究一下一件生成前后端 , 酷酷酷

最后附地址

源码在此
文档在此

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:49:12  更:2021-08-18 12:51:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:49:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码