业务场景

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全栈式编程概述的更多相关文章

  1. CRUD全栈式编程架构之导入导出的设计

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. CRUD全栈式编程架构之服务层的设计

    服务层代码 首先我先放出2个主要类的代码再分别讲解 接口 using System; using System.Collections.Generic; using System.Linq; usin ...

  3. CRUD全栈式编程架构之更精简的设计

    精简的程度 ViewModel精简 服务精简 控制器精简 Index.cshmtl精简 AddOrEdit.cshtml精简 效果:最精简的情况下,只需要写Entity这一个数据库实体然后加上一些简单 ...

  4. CRUD全栈式编程架构之界面层的设计

    Layout的设计 模板模式 mvc的模板特别类似设计模式中模板方法模式,结合Layout中RenderSection和RenderBody方法可以将部分html展现逻辑延迟到具体的视图页面去实现里面 ...

  5. CRUD全栈式编程架构之数据层的设计

    CodeFirst 一直以来我们写应用的时候首先都是创建数据库 终于在orm支持codefirst之后,我们可以先建模. 通过模型去创建数据库,并且基于codefirst可以实现方便的 实现数据库迁移 ...

  6. CRUD全栈式编程架构之MVC的扩展设计

    MVC执行流程 路由的扩展 我理解的路由作用有以下几个 Seo优化,用“/”分开的url爬虫更爱吃 物理和逻辑文件分离,url不再按照文件路径映射 Controller,Action的选择 MVC路由 ...

  7. CRUD全栈式编程架构总结

    这里放出实例代码 github.com/SkyvenXiong/HCC

  8. CRUD全栈式编程架构之控制器的设计

    页面 这里界面我采用jquery miniui来做的,当你完全了解了整个设计之后可以轻松切换到其他的js框架,个人认为类似muniui,easyui等等这类可以将web界面做得和winform类似的框 ...

  9. 全栈式JavaScript

    如今,在创建一个Web应用的过程中,你需要做出许多架构方面的决策.当然,你会希望做的每一个决定都是正确的:你想要使用能够快速开发的技术,支持持续的迭代,最高的工作效率,迅速,健壮性强.你想要精益求精并 ...

随机推荐

  1. DJ

    必知必会13条 all():查询所有结果 filter(**kwargs)   过滤,取到符合条件的对象,比get方法好,找不到会返回空 get(**kwargs)      取到符合条件对象,对象有 ...

  2. shell 获取hive表结构

    hive -S -e "select * from db_name.table_name limit 0"|grep table_name|xargs -n1|sed 's/tab ...

  3. UntraEdit 语法高亮 (MSSQL)

    http://www.ultraedit.com/downloads/extras/wordfiles.html 这里有ue 支持的语言的uew文件. 需要把下载的语法文件放到: %APPDATA%\ ...

  4. Docker & ASP.NET Core 教程

    第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 第五篇: Docker & ASP.NET Core (5):Docker Compose AS ...

  5. MVC 路由检测组件 Routing Debugger

    组件下载地址 haacked.com 1.在mvc项目中引入组件 2.配置route规则 public static void RegisterRoutes(RouteCollection route ...

  6. Silverlight 用DependencyProperty 自定义ImageButton控件 定义属性

    为ImageButton自定义IconSource和Contents属性 xaml代码 <UserControl x:Class="SilverlightCreate.Silverli ...

  7. Python3实现计算BMI指数,跟我一起来计算你的BMI吧

    废话不多说,直接上程序哈: name=input('Name:') height=input('Height(m):') weight=input('Weight(kg):') BMI=float(f ...

  8. LeetCode 303.区域检索-数组不可变(accumulate()和for循环差异分析)

    给定一个整数数组  nums,求出数组从索引 i 到 j  (i ≤ j) 范围内元素的总和,包含 i,  j 两点. 示例: 给定 nums = [-2, 0, 3, -5, 2, -1],求和函数 ...

  9. 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),

    有一种解决方法(ps:from ljq):  把数据库的值先全部遍历出来,然后再对遍历出来值的$key进行一个判断, example: foreach ($results[0] as $key =&g ...

  10. 错误提示”void is an invalid type for the variable“

    今晚做android作业,出现错误提示:void is an invalid type for the variable, invalid:无效的  variable:变量,在网上找了一下后知道是 方 ...