CRUD全栈式编程概述
业务场景
CRUD,从数据驱动的角度几乎所有的的业务都是在做这样的事情。
几乎所有的操作都是在做对表的增删改查。
假设我们将数据库数据规个类:
分为基础/配置数据和业务/增长数据,或者说静态数据和动态数据。
其中静态数据是由后台管理员编辑的产生,动态数据是由客户产生。
那么这部分中的静态数据往往伴随着完整的增删改查逻辑。
完整的增删改查逻辑指的是,有对数据库某个表数据的查询。
一条或者几条数据的添加,删除,修改。
再直白一点就是有个界面,上面有查询,添加,删除,修改,导入,导出的按钮。
设计描述
我针对这上面的情况做了这个设计,技术上用到asp.net mvc和 entityframework的codefirst模式。
由于涉及到从web界面到最底层的数据库设计 所以我把它叫做CRUD全栈式设计
整体架构如图所示:
简要说明:
ListLayout是列表页的布局页
AddOrEditLayout是添加和修改页面的布局页
CrudController 是所有Controller的基类,继承自Controller
其中ViewModel是泛型扩展的模型这个维度,为必须
SearchModel是泛型扩展的查询实体这个维度,可选
OrderModel是泛型扩展的排序实体这个维度,可选
ICrudService 是所有服务接口的父接口
其中三个为泛型扩展维度,和CurdControler一样
CurdService为所有服务的基类,并且继承自ICrudService,其中Entity是efcodefirst的实体
Repository 这里借用了NLayerApp中的Repository设计
SortExpression部分借用了ApWorks中的设计
DB 这里我们用codefirst的话,db我理解起来等同于ef的dbcontext
后续
陆续会有几篇文章详细说明这个设计
1,数据层的设计
2,服务层的设计
3,控制器的设计
4,界面层的设计
5,mvc扩展的设计
6 , 导入导出的设计
7 , 更精简的设计
8 , 总结
最新文章
- nginx 虚拟主机基于端口的搭建
- 三维网格补洞算法(Radial Basis Function)
- 微信签名算法的服务端实现(.net版本)
- LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2
- Java for LeetCode 225 Implement Stack using Queues
- Python if..else
- URL encode 与 URL decode 的C语言实现
- HDU 5775 Bubble Sort(线段树)(2016 Multi-University Training Contest 4 1012)
- (诊断)为GitHub添加SSH key时出现“Could not open a connection to your authentication agent”错误的应对方案(转)
- sql server 高可用故障转移(2)
- python练习五—简单web应用
- 部署Asp.net core &; Nginx,通过nginx转发
- Promise及Async/Await
- Css3新属性:calc()
- java基础-三元运算符
- 简单的redis 的list应用
- nginx配置.htaccess伪静态
- day40-socket编程
- Haskell语言学习笔记(92)HXT
- Storm 第四章 Storm常见问题