.NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务

连着两天更新叙述性的文章大家可别以为我转行了!哈哈!今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧!这个系列教程拖得太久了,所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层之间的协同工作吧!如果你觉得文中有任何不妥的地方还请留言或者加入DotNetCore实战千人交流群637326624跟大伙进行交流讨论吧!

本文已收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划》

作者:依乐祝

原文地址:https://www.cnblogs.com/yilezhu/p/10263714.html

写在前面

前面的章节中我们基本的增删改查都有了,甚至后台模板我们也找到并集成到了我们的CMS系统中了!那么剩下的就是对功能的开发了。对于功能的开发部分,我不会全部都拿出来讲,只会以一个菜单的例子来进行讲解!话不多说,开是吧!

各层之间的协作

先来讲讲我的分层协作的设计思路。虽然借助了DDDLite的部分思想,但是又与其不通,因为小项目严格按照DDD的思想来进行开发完全是找虐。如果有需要我后期会对结构进行调整来向DDD层次迁移。先上一张图吧:

1547195769549

这里所有的底层方法都是在Repository层进行的,加入仓储接口层的原因是为了解耦,一路跟着教程走来的朋友一定知道我目前我的仓储层是按照SQLServer数据库进行开发的,后期我会对MySQL,甚至PgSql的支持!这样的话对应用层丝毫不会有影响。

为什么这里用了应用层的服务?因为如果不实用应用层的话,设计到一些逻辑判断等等的话会把控制器搞的很庞大,代码量太多!为了使控制器简洁所以我加入了服务层的概念,这样服务层处理业务逻辑,把结果返回给控制器即可!当然如果涉及到多个事件的处理的话可能还需要借助MediatR来进行实现!什么你不知道MediatR是什么?那你可以看看我的这篇《ASP.NET Core中使用MediatR实现命令和中介者模式》文章的讲述。

实体层充当数据库实体映射以及DTO及ViewModel的角色!对于实体对象模型我更喜欢贫血模式的整洁干净的实体对象!不喜欢充斥各种代码的充血对象。所以里面都是POCO的简单生成。而ViewModel这个层可能我对这个层的概念设计有点模糊,所以DTO跟ViewModel的都混在一起了!这里你不用太过惊讶,因为你完全可以按照自己的理解来进行整理!自由发挥吧!

菜单的增删改查实现

这一节我们就开始写菜单的增删改查的代码实现吧!

菜单的列表页面功能实现

首选在我们的Czar.Cms.Admin 项目的Controllers控制器下建立MenuController控制器!如图所示:

1547197228635

里面的代码如下:

public class MenuController : BaseController { private readonly IMenuService _service; public MenuController(IMenuService service) { _service = service; } public IActionResult Index() { return View(); } }

我们这里先列出首页(也就是列表页的代码)然后创建对应的Index.cshtml视图

Index.cshtml视图的代码如下:

@{ ViewData["Title"] = "后台菜单管理"; } <blockquote> <form> @Html.AntiForgeryToken() <div> <div> <input type="text" placeholder="请输入菜单名称" /> </div> <a data-type="reload">搜索</a> </div> <div> <a><i>&#xe61f;</i>添加菜单</a> </div> <div> <a><i></i>批量删除</a> </div> </form> </blockquote> <table lay-filter="menuList"></table> <!--操作--> <script type="text/html"> <a lay-event="edit">编辑</a> <a lay-event="del">删除</a> </script> <script type="text/html"> {{# if(d.IsDisplay ===true){ }} <input type="checkbox" value="{{d.Id}}" lay-filter="IsDisplay" lay-skin="switch" lay-text="是|否" checked> {{# } else{ }} <input type="checkbox" value="{{d.Id}}" lay-filter="IsDisplay" lay-skin="switch" lay-text="是|否"> {{# }}} </script> @section Scripts{ <script type="text/javascript" src="http://www.likecs.com/~/layui/layui.js"></script> <script type="text/javascript" src="http://www.likecs.com/~/js/menu/menuList.js?_=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script> }

可能对于大多数人来说看到这个视图很懵逼,怎么没有列表的信息啊,语法什么的也都看不懂啊?别急,这里用到的是Layui的一些语法!我们拆分下来看:

<form>这个部分就是搜索功能部分

<table lay-filter="menuList"></table>就是表格

<script type="text/html">这个是layui模板部分

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfzfz.html