《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. 提供了命令式安装脚手架 , 其中包括了大部分的常用基类 , 代码非常简洁
    《Flutter进阶》用dart搭建服务端:dart_mars框架研究_第1张图片
  4. 作者汤大佬不仅技术牛逼 , 人也很风趣友善 ,毫不吝惜为源码解惑 , 他的文风 也是很好玩的:

《Flutter进阶》用dart搭建服务端:dart_mars框架研究_第2张图片

  • 三、dart_mars给的思路和启示

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

我们先结合源码来看项目脚手架 , 首先看看项目入口
《Flutter进阶》用dart搭建服务端:dart_mars框架研究_第3张图片
可以看到在项目入口处 , 提供了 常用的几个命令行 , 分别执行创建项目 , 运行项目 , 编译项目等 (当然这里你也可以很方便的扩展你的方法) , 这里为我们扩展项目命令提供了环境 ;

具体创建或者运行项目的代码 , 都在各自的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 < 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目录下的所有文件拉
《Flutter进阶》用dart搭建服务端:dart_mars框架研究_第4张图片

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

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

class TemplateHelper {
  String packageName;
  bool forceWrite = 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 {
    这里省略若干内容代码
    }

''';

  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+模板,
《Flutter进阶》用dart搭建服务端:dart_mars框架研究_第5张图片
然后项目下面:
《Flutter进阶》用dart搭建服务端:dart_mars框架研究_第6张图片
是不是一目了然非常清晰 .
最后附一下darmars的地址

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

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

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

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

最后附地址

源码在此
文档在此

你可能感兴趣的:(Dart服务器,《Flutter进阶》)