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 , 总结
CRUD全栈式编程概述的更多相关文章
- CRUD全栈式编程架构之导入导出的设计
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- CRUD全栈式编程架构之服务层的设计
服务层代码 首先我先放出2个主要类的代码再分别讲解 接口 using System; using System.Collections.Generic; using System.Linq; usin ...
- CRUD全栈式编程架构之更精简的设计
精简的程度 ViewModel精简 服务精简 控制器精简 Index.cshmtl精简 AddOrEdit.cshtml精简 效果:最精简的情况下,只需要写Entity这一个数据库实体然后加上一些简单 ...
- CRUD全栈式编程架构之界面层的设计
Layout的设计 模板模式 mvc的模板特别类似设计模式中模板方法模式,结合Layout中RenderSection和RenderBody方法可以将部分html展现逻辑延迟到具体的视图页面去实现里面 ...
- CRUD全栈式编程架构之数据层的设计
CodeFirst 一直以来我们写应用的时候首先都是创建数据库 终于在orm支持codefirst之后,我们可以先建模. 通过模型去创建数据库,并且基于codefirst可以实现方便的 实现数据库迁移 ...
- CRUD全栈式编程架构之MVC的扩展设计
MVC执行流程 路由的扩展 我理解的路由作用有以下几个 Seo优化,用“/”分开的url爬虫更爱吃 物理和逻辑文件分离,url不再按照文件路径映射 Controller,Action的选择 MVC路由 ...
- CRUD全栈式编程架构总结
这里放出实例代码 github.com/SkyvenXiong/HCC
- CRUD全栈式编程架构之控制器的设计
页面 这里界面我采用jquery miniui来做的,当你完全了解了整个设计之后可以轻松切换到其他的js框架,个人认为类似muniui,easyui等等这类可以将web界面做得和winform类似的框 ...
- 全栈式JavaScript
如今,在创建一个Web应用的过程中,你需要做出许多架构方面的决策.当然,你会希望做的每一个决定都是正确的:你想要使用能够快速开发的技术,支持持续的迭代,最高的工作效率,迅速,健壮性强.你想要精益求精并 ...
随机推荐
- django权限二(多级菜单的设计以及展示)
多级权限菜单设计级标题栏 我们现在只有数据展示,要进入其他url还需要手动的输入路径,非常的麻烦,所以我们要设计 一个导航栏以及侧边多级菜单栏,这个展示是通过stark组件的设计的增删改查页面,而 每 ...
- asp.net搭建项目架构
项目的架构决定这个项目的好坏. 今天我说说传统三层架构的搭建 第一步 创建一个解决方案 例如 TaskSystem 接着这个解决方案下创建六个项目分别: TaskSystem.DAL TaskSyst ...
- Python中的None与 NULL(即空字符)的区别
None是Python的特殊类型,NoneType对象,它只有一个值None. 它不支持任何运算也没有任何内建方法. None和任何其他的数据类型比较永远返回False. None有自己的数据类型No ...
- java动态数组笔记
动态数组: 在java.lang.reflect包下提供了Array类,包括一系列static方法,通过这些方法可动态的创建数组.给元素赋值.取出元素值等等 //理解数组引用——下面定义的objs数组 ...
- my16_sql_thread执行慢导致主从延迟高的一个情景
现象:从库延迟高,查看slave status发现sql_thread执行语句的速度比主库慢,这样的延迟会一直高下去,下面是排查的一些过程1. 检查了从库的配置,磁盘的写入速度的确没有主库高2. io ...
- jsp中判断if 和 else
<c:choose> <c:when test="${date==datetime}"> ...
- tcp的半连接与完全连接队列(二)
队列及参数 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包开设一个条目(服务端在接收到SYN包的时候,就已经创建了request_s ...
- Sqlite操作的一些关键类的官方说明与Intent的startactivityforresult方法
Intent: 该功能可以用于通过intent来跳转界面时候传递信号给原理的页面,以便做出一些处理: sqlite的使用: 该方法得到的sqlitedatabase可读可写,而getreadabled ...
- sed替换命令
sed替换命令 语法为: sed ' [ address-range | pattern-range ] s/original-string/replacement-string/[substitut ...
- JavaScript Date学习实例:获取3分钟前的时间“hhmmss”格式
上一篇博客分享了Date对象的理论知识,今天正好看到一段相关的代码,可以继续深化,通过实例加强复习Date 题目:获取3分钟前的时间,并且显示格式是hhmmss 以下是看到的代码 var time=n ...