这是最近刚刚重构完成的项目,有点迫不及待的分享给大家,为了跟上技术升级把原来基于MVC Razor Page开源项目 RazorPageCleanArchitecture 进行重构, 前端用Blazor-Server mode代替,后端架构和功能保持一致。具体内容可以访问GitHub了解.

Source Code Repo

Blazor Dashboard Application: https://github.com/neozhu/CleanArchitectureWithBlazorServer

Razor Page Application:https://github.com/neozhu/RazorPageCleanArchitecture

Code Generator Tools:https://github.com/neozhu/CleanArchitectureCodeGenerator

Live Demo

Live Demo: https://mudblazor-s.dotnet6.cn/

Video: https://www.youtube.com/watch?v=GyZJl_dG-Pg

Screenshots



为什么采用Blazor Server mode而不是用前后端分离的Webassembly mode开发

因为简单,采用前后端分离的架构,需要在Server端加WebApiController,Webassembly还需要生成Http Client,这里我觉得存在非常多的重复工作,而对于普通的小型项目我认为没有必要把时间花在这里,前后端分离反而会让架构和代码变得更加复杂。当然Blazor Server mode还有很多优势比如性能加载速度明显要比Webassembly要快,具体的对比可以从网上查到。

开发环境

  • DotNet 6
  • Microsoft Visual Studio 2022 (64-bit)
  • Support Docker

依赖第三方库(重点)

技术

  • Blazor Server
  • MudBlazor UI Component
  • MediatR
  • Fluent Validation

主要功能

  • 代码生成工具: https://github.com/neozhu/CleanArchitectureCodeGenerator
  • Theme管理: 颜色主题的配置
  • 多语言: 支持多语言切换
  • 用户管理:注册,角色授权
  • 角色管理:角色授权管理
  • 菜单导航管理: comming soon
  • 服务监控:comming soon
  • 定时任务:comming soon
  • 字典管理:comming soon
  • 通知管理:comming soon
  • 操作日志:comming soon
  • 系统日志:comming soon

    以上还有很多功能没有迁移过来,后面会慢慢更新。

How to

参考 application/features/Products 增删改查的代码,还包含导入导出功能和图片上传功能

开发体验

一句话用了Blazor开发Web应用程序再也不想回到用Jquery, DOM对象的操作了, 只用c#就能开发出与VUE或是Angular,React一样的SPA应用, 这真的是一种非常酷的体验。

最后

如果你对这个项目感兴趣,可以给星吗。

分享刚出炉的基于Blazor技术的Web应用开发框架的更多相关文章

  1. 论一种基于JS技术的WEB前端动态生成框图的方法

    前言 HTML是一种标记语言,由HTML的标签元素和文本编写的文档可被浏览器描述为一幅网页.通常情况下网页的实现是由HTML.CSS和Javascript三者结合完成的,HTML负责网页的结构,CSS ...

  2. 分享一个自己写的基于JQuery的一个Web背景切换的Demo

    这个效果主要有两个特点: 1. 背景切换的渐变 2. 背景大小自适应 3. 背景自适应保持比例同时, 相对居中 js源码: (function ($) { $.fn.bgChange = functi ...

  3. 构建一个基于 Spring 的 RESTful Web Service

    本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...

  4. 基于Html5的移动端APP开发框架

    快速增长的APP应用软件市场,以及智能手机的普及,手机应用:Native(原生)APP快速占领了APP市场,成为了APP开发的主流,但其平台的不通用性,开发成本高,多版本开发等问题,一直困扰着专业AP ...

  5. 分享25个新鲜出炉的 Photoshop 高级教程

    网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...

  6. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  7. Onsen UI – 新鲜出炉的 PhoneGap 界面框架

    Onsen UI 是一个基于元素自定义的 HTML5 UI 框架,用于构建你的移动前端.这个一个基于 Web 组件的概念的框架,让构建应用程序变得更加轻松.Onsen UI 专门针对 PhoneGap ...

  8. 腾讯技术分享:微信小程序音视频技术背后的故事

    1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...

  9. 【旧文章搬运】PE感染逆向之修复(Serverx.exe专杀工具出炉手记)

    原文发表于百度空间,2008-10-4看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm================================== ...

随机推荐

  1. for update未提交导致锁表

    select for update 是为了在查询时,避免其他用户以该表进行插入,修改或删除等操作,造成表的不一致性. 应用场景: 什么时候需要使用for update?就是那些需要业务层面数据独占时, ...

  2. ORACLE 之 按月循环执行操作

    DECLARE i number; BEGIN i:= 201705; WHILE i <202104 LOOP if i=201713 then i:=201801; elsif i=2018 ...

  3. 微信小程序自定义导航栏组件

    1.首先,要在json文件中设置为自定义的形式 "navigationStyle": "custom" 2.计算相关值 导航栏分为状态栏和标题栏,只要能算出每台 ...

  4. 01-JS中字面量与变量

    01-JS中字面量与变量 一.直接量(字面量) 字面量:英语叫做literals,也做直接量,看见什么,它就是什么. (一)数字的字面量 数字的字面量,就是这个数字自己,并不需要任何的符号来界定这个数 ...

  5. Docsify使用指南(打造最快捷、最轻量级的个人&团队文档)

    前言 网上关于动态文档生成工具有很多如:Docsify. VuePress.Docute .Hexo这些都是一些非常优秀的文档生成工具,本章主要介绍如何快速使用Docsify搭建一个快捷.轻量级的个人 ...

  6. 【C++】STL算法

    STL算法 标签:c++ 目录 STL算法 一.不变序列算法 1.熟悉的min(), max() 2.找最值还自己动手么?不了不了 3.熟悉的find()和新学会的count() 二.变值算法 1.f ...

  7. golang gin框架中实现大文件的流式上传

    一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式 ...

  8. linux中链接错误的时候,快速找到缺失的符号在哪个库中

    编译一个opencv程序,链接的时候出现大量的如下错误: /home/admin/opencv/opencv-master/modules/imgproc/src/color_lab.cpp:23: ...

  9. 搭服务器之kvm--vnc连接虚拟机连接闪退直接消失 以及virsh shutdown命令无效解决办法。

    之前暑期见识到了虚拟化在企业中的应用,感慨不小,以前只是自己在玩儿桌面vmware workstation,安装的虚拟机也没啥大感觉.在公司机房里大家用的dell poweredge 420,8gme ...

  10. C++基本面试题1

    #include<iostream>using namespace std;class A{public: A(char* s) :name(s), len(strlen(name.c_s ...