ASP.NET Core模块化前后端分离快速开发框架介绍之1、开篇


源码地址

GitHub:https://github.com/iamoldli/NetModular

演示地址

地址:https://nm.iamoldli.com
账户:admin
密码:admin

前端框架演示地址(临时)

地址:http://nm.demo.iamoldli.com/index.html
账户:admin
密码:admin

目录

1、开篇


我想要的模块化

1、采用前后端分离。
2、将业务拆分成独立的模块,后端代码打包并发布到公司内部的NuGet包管理平台,前端代码打包发布到公司内部的NPM包管理平台。
3、项目中用到了哪个模块,直接通过包的形式安装对应的包。
4、开发人员只需要关心自己负责的模块,不需要知道依赖的业务模块代码逻辑。

项目架构图

架构图

模块化原理

实现模块化首先要解决的就是如何将多个模块集成到一个系统里面,因为我们用的是WebApi,也就是说要解决怎么把每个模块的控制器注册到系统中。好在ASP.NET Core提供了对应的功能,可以让我们很方便的实现这个效果,那就是ASP.NET Core 中的应用程序部件,它能够让我们动态的从一个程序集中发现并加载我们需要的控制器

// create an assembly part from a class's assembly
var assembly = typeof(Startup).GetTypeInfo().Assembly;
services.AddMvc()
    .AddApplicationPart(assembly);

// OR
var assembly = typeof(Startup).GetTypeInfo().Assembly;
var part = new AssemblyPart(assembly);
services.AddMvc()
    .ConfigureApplicationPartManager(apm => apm.ApplicationParts.Add(part));

需要注意的是,在系统启动的时候,ASP.NET Core默认会自动从入口程序集开始,遍历所有的依赖程序集并添加系统中。

var entryAssembly = Assembly.Load(new AssemblyName(entryAssemblyName));
var assembliesProvider = new ApplicationAssembliesProvider();
var applicationAssemblies = assembliesProvider.ResolveAssemblies(entryAssembly);

foreach (var assembly in applicationAssemblies)
{
    var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
    foreach (var part in partFactory.GetApplicationParts(assembly))
    {
        ApplicationParts.Add(part);
    }
}

因为所有模块都是通过包安装到项目中的,所有模块都是有依赖的,也就不需要我们手动添加了。

使用代码生成器快速开发

基本上每一个框架都会提供代码生成器的功能,NetModular也不例外,与别的代码生成器不同,NetModular的代码生成器是作为一个模块存在的它可以集成到任何项目当中。
大部分代码生成器都是根据先创建数据库,在根据数据库来生成代码,而NetModular的代码生成器则是在线创建项目、实体、属性等,然后根据这些数据生成代码以及数据库文件。
具体的不在演示,大家有兴趣的话可以访问上面的Demo地址自己体验一下~

结尾

这边文章只是简单做个介绍,后续希望自己能够写一个系列的文章来详细的讲解基础框架的各个模块、前端框架模块以及已有的业务模块。

原文首发:https://iamoldli.github.io/2019/05/20/net-core-mo-kuai-hua-kai-fa-kuang-jia/1-kai-pian/