2020年3月25日的“盛派周三分享”活动首次使用直播的方式与大家见面,共有 500 多人参与了活动,得到了众多开发者的好评,并强烈要求我分享 PPT,这点要求当然必须满足啦!

  除此以外,还有许多开发者因为时间冲突,没有能够及时光看直播,我们特地录制了直播视频,并提供回放,腾讯视频地址:

  http://v.qq.com/x/page/d0940ivnyih.html

  PDF 下载:20200324周三分享SCF.zip

  本次直播活动受到了国内广大社区的支持,再次表示感谢(按拼音顺序排列,不分先后):

  • “DotNetCore实战”公众号
  • “dotNET跨平台”公众号
  • “汪宇杰博客”公众号
  • 52ABP
  • DNT精英论坛
  • 北京.NET技术俱乐部
  • 大湾区 .Net 技术俱乐部
  • 合肥.NET技术社区
  • 胶东.NET俱乐部
  • 胶东开发者部落
  • 角落的白板报
  • 盛派开发者社区
  • 微软技术俱乐部(杭州)
  • 微软技术俱乐部(苏州)
  • 温州.NET微软技术社区
  • 徐州.NET俱乐部

  

  以下回顾几点重要的信息,以及大家的提问进行解答(如果有新的问题可以留言,我会更新在下面)。

什么是SCF?

  SCF( SenparcCoreFramework)是一整套可用于构建基础项目的企业级通用框架,严格遵循 DDD 设计模式,包含了基础的缓存、数据库、模型、验证及配套管理后台等等系统基础要件,高度模块化,具有高度的可扩展性和耐操性。
  SCF 支持容器化和微服务部署,也支持单体应用部署。

SCF 的中期目标

  成为 .NET 界和 Spring 一样有影响力的 Web 开发框架。

开源地址

模板:

https://github.com/SenparcCoreFramework/SCF

https://gitee.com/SenparcCoreFramework/SCF

基础库:

https://github.com/SenparcCoreFramework/ScfPackageSources

Senparc .NET 开源生态

SCF 的理念、基础模块、扩展模块、规范和开源项目说明

XSCF 是个啥?

  • XSCF 是 SCF 中所有可扩展模块的代号例如 Senparc.Scf.Core 是基础模块,不是 XSCF

  • 需要实现 IXScfRegister 一系列接口用于进行配置和引导自动注册、启动

  • 命名规则:[组织名].Xscf.[模块名]如:Senparc.Xscf.WeixinManager或:Senparc.Xscf.WeixinManager.TenPay

  • XSCF 之间可以相互依赖,也可以保持独立,但必须可以小粒度独立发布(如 nuget,或轻量级dll)

数据库如何做到独立开发,统一集成?

  这是几乎所有支持高度分离的模块化、插件化框架开发的难点和痛点,为此,SCF做了大量的尝试和设计,已经形成了一套成熟、高效、高兼容性的架构,先来看图:

  在 XSCF(模块)中(图左侧),可以按照常规开发单体独立项目一样,创建自己的DbContext(MyEntitiesContext),需要继承 XscfDatabaseDbContext (其继承自 DbContext)。

  然后按照正常的开发方式,进行 Code First 的方式开发 Entity 并配置 DbSet 和 Mapping,并进行所有常规的数据库开发操作(需要使用 .NET Core 的 DI 来初始化这个 DbContext)。然后,使用命令 add-migration [名称] - Context MyEntitiesContext  添加数据库更新 migration 代码(这是唯一在更新数据库过程中需要输入的命令,或者独立指令,其他步骤全部全自动完成)。

  在 SCF 基础框架内(图右侧),已经内置了 SenparcEntitiesContext(当然你也可以自定义),其继承结构和 MyEntitiesContext 完全一致,这也保证了两个 DbContext 行为的一致性。

   在系统启动时,会自动检索实现了 IXscfDatase 接口的 XSCF,并自动寻找自定义的 DbContext(MyEntitiesContext),然后将其下的 DbSet<> 对象自动添加到一个全局缓存列表中,同时将 Mapping 信息注入到 SenparcEntitiesContext,使所有 XSCF 模块的 DbSet<> 对象,与 SenparcEntitiesContext 融为一体。

  当系统被访问时,不会主动注册 XSCF 中的 DbContext,只会寻找到“大而全”的 SenparcEntitiesContext,因此每个访问中,只会出现一个数据库连接实例,而与已安装的模块无关。

  更多精彩分享,请直接看视频吧:http://v.qq.com/x/page/d0940ivnyih.html

选取几位开发者的提问:

Q:SCF 的应用场景是什么?

A:这个框架因为是一个基础框架,并且高度模块化的,可以搭载任意场景的模块上来,所以基本上什么场景都能用,看你自己的应用场景,去设计或者选择使用对应的框架就行了。

Q:关于 SCF 中 DDD 的设计思路?

A:关于 DDD 的问题,建议大家去看一下我那个视频,也是针对 SCF 的设计背景来介绍的,相信看完之后就会有很多感受的:https://v.qq.com/x/page/h0840us1cq2.html,看完之后,如果还需要讨论的话,最好看完再讨论,这样大家会有一些共识。另外,直播中也提到,我们目前是 beta 状态,DDD 中非常重要的聚合功能还在完善中,等进一步完善之后,大家将看到一个更加全面的全貌。当然,目前的 SCF 已经足够可以满足关联查询、数据管理的使用。

Q:后期模板市场开放后,后台管理界面样式如何保持一致?

A:我们将设计一套顶层“皮肤”标准,开发者可以在自己框架下面进行开发,系统所选用的皮肤可以作用于已经安装的所有模块。

欢迎继续讨论

  如有任何问题,欢迎留言讨论!社区欢迎大家多多参与,并提出宝贵意见建议!

SCF(SenparcCoreFramework) 系列教程(一):项目介绍及快速搭建的更多相关文章

  1. spring cloud系列教程第一篇-介绍

    spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...

  2. SpringBoot系列教程web篇之Beetl环境搭建

    前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问 ...

  3. SpringBoot系列教程web篇之Thymeleaf环境搭建

    上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目 推荐结合Freemaker博文一起查看,效果更佳 1 ...

  4. SpringBoot系列教程web篇之Freemaker环境搭建

    现在的开发现状比较流行前后端分离,使用springboot搭建一个提供rest接口的后端服务特别简单,引入spring-boot-starter-web依赖即可.那么在不分离的场景下,比如要开发一个后 ...

  5. 一、VUE项目BaseCms系列文章:项目介绍与环境配置

    一.项目效果图预览: 二.项目介绍 基于 elementui 写一个自己的管理后台.这个系列文章的目的就是记录自己搭建整个管理后台的过程,希望能帮助到那些入门 vue + elementui 开发的小 ...

  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA

    笔记 2.快速搭建SpringBoot项目,采用IDEA     简介:使用SpringBoot start在线生成项目基本框架并导入到IDEA中 参考资料:         IDEA使用文档    ...

  7. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse

    笔记 1.快速搭建SpringBoot项目,采用Eclipse     简介:使用SpringBoot start在线生成项目基本框架并导入到eclipse中 1.站点地址:http://start. ...

  8. 数据库中间件DBLE学习(一) 基础介绍和快速搭建

    dble基本架构简介 dble是上海爱可生信息技术股份有限公司基于mysql的高可用扩展性的分布式中间件.江湖人送外号MyCat Plus.开源地址 我们首先来看架构图,外部应用通过NIO/AIO进行 ...

  9. Git系列教程二 基础介绍

    一.存储方式 如果让我们设计一个版本控制系统,最简单的方式就是每做一次更改就生成一个新的文件. 这样的方式太占用空间,所以传统的版本控制系统都是保存一个文件的某个版本的全部内容以及其他版本相对于这个版 ...

随机推荐

  1. js编写trim()函数

    1.js中本身是没有trim函数的,不过你可以自己写一个 function trim(str) {     var newStr = str.replace(/^\s*$/g,'')     retr ...

  2. 【转】从技术和成本算笔账,自动驾驶L3过渡到L4有多难?

    转自:http://www.sohu.com/a/160479216_121787 从技术和成本算笔账,自动驾驶L3过渡到L4有多难? 2017-07-28 09:34 英伟达解决方案架构师程亚冰认为 ...

  3. LeetCode Problem 90. Subsets II

    python solution 123456789101112131415161718192021222324252627 class (object): def subsetsWithDup(sel ...

  4. CentOS7用yum安装wget命令后仍然提示命令找不到的解决方法

    需求:用的AWS实例自带的CentOS7用yum安装wget命令后扔提示命令找不到,后面用源码安装方式解决,下面先讲解决方法,疑问及知识点扩展最后写出 1.问题(因是mini版本系统,有些基本命令扔需 ...

  5. [人工智能]NumPy基础

    理解NumPy 本文主要介绍NumPy的基础知识,NumPy是一个功能强大的Python库,允许更高级的数据操作和数学计算. 什么是NumPy NumPy,来源自两个单词:Numerical和Pyth ...

  6. Appium移动自动化框架功能概括

    小编说:Appium 是一个移动端自动化测试开源工具,可以针对不同的平台用一套API 来编写测试用例.本文对Appium自动化测试框架的功能进行了概括. 本文选自<软件自动化测试开发>,了 ...

  7. JavaScript学习之内存

    初学JavaScript时,看红皮书了解了JS基本类型和引用类型在内存中的位置,结果看了简书里的一篇文章,发现对这块的了解还是有些缺陷. 基本类型 JavaScript中的基本类型有五种:Undefi ...

  8. LeetCode~报数(简单)

    报数(简单) 题目描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1 11 21 1211 111221 1 被读作 "one 1" ( ...

  9. 【简单版】hexo博客搭建流程梳理

    前言 本文章会为你梳理一个搭建hexo博客的流程 相关网址: Docs: https://hexo.io/docs/ Themes: https://hexo.io/themes/ 安装hexo 准备 ...

  10. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.2)- FlexSPI NOR连接方式大全(RT1060/1064(SIP))

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1060/1064(SIP)两款MCU的FlexSPI NOR启动的连接方式. 上一篇文章<FlexSPI N ...