想个性化定制一套Blog.Core项目?请看这里
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想个性化定制一套Blog.Core项目?请看这里相关的知识,希望对你有一定的参考价值。
一、故事回顾
书接上文,上篇咱们说到了我们可以将不同的配置文件给拆开,从而实现分治的思路,同时也做了一个投票——《在BlogCore中,将配置文件做可读性拆分》,这里也简单说下最终的结果:
从结果上来看,在近60个小伙伴投票中,还是建议拆开的,而且也对新手比较友好,尤其修改的时候,也是能找到指定的地方,最后发布的时候,也会合并成一个文件,和之前的开发模式也不会有任何的冲突,我个人也是表示支持分开的。
特别是和BCVP开发组的其他开发人员讨论过后,也都是认为,其实应该拆分,而且不光是文件,或者配置文件的拆分,更多的还是应该向微服务上走,将服务和配置也做一个拆分,可以做成一个类库,或者直接一个nuget的形式,以插件化的思维来统一项目,做成一个可拔插可扩展的多组件框架模式。无独有偶,在上篇的第二个投票中,也是更多的人来关注和建议将这个功能,作为下一步框架设计的重点和需要考虑的地方。
那我和开发组的小伙伴,今年就往这个方向思考思考,努努力吧,争取继续为.NET社区做贡献,打造更好用的微服务框架。
其实关于拆分配置文件和自定义服务扩展,还能对另一个功能起到举足轻重的好处,这个功能好几年前我就在想了,一直苦于没有好的思路和方案,那就是给框架做一个完全可以个性化定制的“BlogCore”框架,那下面,我就说说具体是一个什么功能设计。
二、新功能设计初衷
在很久之前,我就考虑着将项目做成一个可任意功能配置的平台,功能虽然很多,但是都是插件化的思维,可以任意添加和卸载,用户只需要指定指定的功能,就只包含指定的功能,这样不仅有利于新手入门;也能针对不同企业,做不同的定制化;同时也能方便各个社区小伙伴贡献自己的插件。
但是受限于前期设计是一个大而全的,配置也很全,导致不好分割,所以迟迟没实现,虽然做了一个CreateYourProject.bat,用户可以创建自己的项目,但是只不过是名字变了,有些不需要的功能,还是只能手动删除,有时候删多了,可能还报错。正好这次在BCVP开发组小伙伴的思路和上篇文章中,配置文件拆分的思路,才让我有了对新功能的进一步设计动力,那就是打造一个平台功能,可以生成一个任意可定制的个性化项目。我目前也简单做了一部分,先迫不及待地给大家展示下。
三、定制化设计思路
因为还是半成品,所以项目我就先不开源了,感兴趣的小伙伴可以私聊,或者评论留言,也可以一起参与开发中。目前设计思路大概是这样的:
1$ 初始化新项目
这一步和之前一样,还是创建一个新的大而全的项目,只不过需要用户在网站平台上,输入一个自己的名字:
然后这里是用接口的形式,把项目生成到服务器里,(也很简单,就是调用了一个可执行文件),给每一个用户一个账号,同一个账号在服务器里生成一个文件夹,一个文件夹代表一个项目,默认一个用户只能创建3个项目。
string folderExistUser = Path.Combine(_webHostEnvironment.ContentRootPath, ".1YourProject", userName);
if (Directory.Exists(folderExistUser))
var childrenFolder = new DirectoryInfo(folderExistUser);
if (childrenFolder.GetDirectories()?.Count() > 2)
data.msg = "同一个用户一天内只能创建3个项目,请明天重试";
return data;
var output = "";
try
string path = Path.Combine(_webHostEnvironment.ContentRootPath, "Resources");
//根据系统使用不同的shell文件
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) path += "/win.bat";
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) path += "/linux.sh";
else path += "/OSX.sh";
var psi = new ProcessStartInfo(path, $"userName projectName") RedirectStandardOutput = true ;
//启动
var proc = Process.Start(psi);
if (proc == null)
Console.WriteLine("Can not exec.");
else
Console.WriteLine("-------------Start read standard output--------------");
//开始读取
using (var sr = proc.StandardOutput)
while (!sr.EndOfStream)
Console.WriteLine(sr.ReadLine());
if (!proc.HasExited)
proc.Kill();
Console.WriteLine("---------------Read end------------------");
Console.WriteLine($"Exited Code :proc.ExitCode");
Console.WriteLine($"项目初始化成功");
output += "项目初始化成功";
catch (Exception e)
_logger.LogError(e, e.Message);
data.msg = $"创建失败:Error Message e.Message";
return data;
2$ 项目功能自定义配置
这里就是很核心,很复杂的一步了,用户在页面里勾选或者配置不同的功能,然后通过接口调用,将刚刚生成的项目文件,做不同的增删改查,或者是替换等各种技术,最终达到一个定制化的目的。(这里真是不看不知道,一看已经集成了这么多功能了,还有支付、公众号等多个模块还没写,这里还是建议如果您自己的开源项目中用到了Blog.Core项目相关功能,可以做个说明,我看有些项目直接COPY就开源成自己的了,毕竟开源不易😂)
具体的代码呢,前端很简单,后端很复杂,都是一个个的事件,不过我认为这个方法比较笨,所以就暂时贴出来了一部分,大概就是这样:
每个功能就是一个插件,以后都插件化以后,就更简单了。
同时配置文件分开以后,每个功能就是一个json,直接替换掉某个配置文件,就能快速实现自定义配置的功能,比如数据连接对象JSON,直接将JSON提交到接口,然后生成单独的配置文件即可。
3$ 项目导出
这最后就是很简单了,直接将生成并优化后的项目文件生成出来即可,直接打开就能用,就能跑。
好啦,整体设计和开发大概就是这样的,因为还是开发设计中,所以目前还没有完整的部署,等以后方便的时候,我会开启一波内测,找几个小伙伴试试,然后再开放出来吧,同时也是更希望能有更多的小伙伴都参与进来,毕竟是能为国内.NET社区做贡献,也是一个很辛苦但是也很幸福的事情,元芳,你怎么看?😉
以上是关于想个性化定制一套Blog.Core项目?请看这里的主要内容,如果未能解决你的问题,请参考以下文章