用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建
一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了。好吧,就叫Trump吧。没有任何含义,玩嘛!
项目分层结构也要在这里说一下,这次这个小功能仿照DDD的分层模式,一定记住我说的是仿照。因为我也不懂DDD,我就画个皮。
DDD这个东西中文名字应该叫领域驱动设计,园子很多大神分享过、讲解过。看了很多博客很多书,依然没太理解这么复杂的东西(没有实践,纸上得来终觉浅)。这里简单说说自己的理解,把业务逻辑尽量的集中在领域层(Domain),如果项目是人体,那领域层就是人体的大脑了,以现在的科技,身上的零件除了大脑基本都可替换。也许可以把大脑换到另一个人身上,但是,整个身子还是要听大脑的指挥。如果身体没有了大脑,基本上就是一滩肉,失去了作为机体的功能。
另外作为一个机体,还远远没有达到想电脑那样的低耦合度,所以大部分零件更换的成本都很高。即使是一台电脑,要更换零件也是要考虑到整体平台的架构等等信息,所以谈到低耦合,可替换的时候在不是万般无奈情况下,使用的几率很小。
放到项目上的一个例子,比如引入工作单元、仓储层的概念,就是为了隔离领域与数据持久化,但是真正项目上线,要替换数据持久化的那一层谈何容易。基于项目现有应用场景,然后进行技术选型的时候,要综合开发效率,开发成本,可扩展性,可维护性等等,并不是什么高大上就用什么,什么概念都要涉及,那样只会成为一场技术点堆砌而难以实际应用。
比如我们这个项目,就是一个小的功能,现在可预估的用户量就是你我他,你非要在还没上线没成型就考虑百万级用户的扩展,估计这个项目永远都没法上线了。
技术没有好坏,只有适合不适合!当然,php是最好的语言,这是世间真理!
以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型;
由领域模型驱动软件设计,用代码来实现该领域模型;
要详细了解DDD的概念可以打开上面的链接,包括下方图片,也是从文章中粘过来的,在此我们只是用他的分层,并没有实践DDD。
领域驱动设计的经典分层架构
小功能的分层
我们这个小项目分四层,分别为
- Trump.Domain 主要存放模型,不引用任何项目
- Trump.EF 实现数据持久化内容,本案中使用EF6,所以这里会有大量EF CRUD实现的操作,依赖Domain项目
- Trump.Application 实现数据与UI的交互,经过EF处理的数据在这一层转接为DTO返回到UI层,依赖Domain、EF项目
- Trump.ExamApp UI层实现,使用MVC5+Web Api+jQuery+Bootstrap构建,依赖Domain、Application层。
一般项目中还会有一个帮助类的项目,提供一些常用方法封装,扩展方法等,并不作为任何项目独有,所以这里就不列出来了。
创建解决方案及创建项目(Vs 2017)
来吧来吧,新建空白解决方案,然后添加MVC项目,名字叫Trump.ExamApp,这个很基础很基础的,只列一下注意点
1.选择ASP.NET Web应用程序.NET Framework ,上面那个是传说中的跨平台版本。比较落伍,看了几回视频都是第几集。
2.选择MVC,同时勾选Web API(不勾选亦可以,可以通过Nuget添加),身份验证那里选择不进行身份验证。()
身份验证:
不进行身份验证:不使用net自带的身份管理
个人用户账号:集成Asp.Net Identity v2(.NET Framework) or v3+(.NET Core)版本
3.创建完毕后如图
4.使用Nuget管理项目中的引用
在项目上右键,管理Nuget程序包,移除“Microsoft.ApplicationInsights”。Application Insights 是可扩展的应用程序性能管理 (APM) 服务,可让 Web 开发人员在多个平台上生成和管理应用。暂时用不到,但是package有好几个,习惯性移除掉,然后就是升级一下除了jQuery外所有的包。
注意:因为兼容性问题,jQuery版本不要随便变更
好了。到此为止,这个项目基本完毕,接下来就是按照约定的名字创建其他几个项目,选择类型为类库(.NET Framework)。
都创建完毕后,刷新一下,然后生成解决方案。把Web项目设置为启动项目,F5启动调试,我们整个项目的架子基本搭建完毕。
用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建的更多相关文章
- 用MVC5+EF6+WebApi 做一个小功能(二) 项目需求整理
在一个项目开始前,需求整理大概要占到整个项目周期15%甚至30%的比重,可以说需求理得越清楚,后续开发中返工几率越小.在一个项目中,开发新功能的花费的精力要远远小于修改功能的精力,这基本是一个共识.老 ...
- 用MVC5+EF6+WebApi 做一个小功能(四) 项目分层功能以及文件夹命名
在上一节,我们完成了一个项目搭建,我们看到的是一个项目的分层架子,那接下来每一层做什么以及需要引用哪些内容呢?在本节内容我们还逐步拆分每一层的功能,顺带添加package包 Trump.Domain ...
- 用MVC5+EF6+WebApi 做一个小功能(一)开场挖坑,在线答题系统
从哪开始说呢,这几年微软的技术一直在变,像是牟足了劲要累死所有的NET程序员,从WebForm到MVC到现在MPA.SPA .Razor单页,从net2.0一直走到现在.net4.6.2,后面还有一个 ...
- 用MVC5+EF6+WebApi 做一个考试功能(五) 前端主题
内容概述 前面絮絮叨叨没正事,到现在为止也没有开始写代码,不过在考虑下貌似这一节还是开始不了. B/S架构开发有一个特点,就是用浏览器打开,不同的用户群体可能有不同的风格,不论是管理平台还是普通的网站 ...
- 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类
前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...
- 使用PixiJS做一个小游戏
PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...
- 用RecyclerView做一个小清新的Gallery效果 - Ryan Lee的博客
一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 我的第一个netcore2.2 api项目搭建(三)
上一章快速添加了swagger文档管理功能,我的第一个netcore2.2 api项目搭建(二) 这一章实现目标三:api添加身份验证功能 在实现该目标之前,先得理解netcore运行机制. 这是微软 ...
随机推荐
- 深度解析Java中的那把锁
锁的本质 我们先来讨论锁的出现是为了解决什么问题,锁要保证的事情其实很好理解,同一件事(一个代码块)在同一时刻只能由一个人(线程)操作. 这里所说的锁为排他锁,暂不考虑读写锁的情况 我们在这里打个比方 ...
- Cmder的安装
Cmder把conemu,git-for-windows和clink打包在一起,让你无需配置就能使用一个真正干净的Linux终端!性感的外观,强大的功能!代替了Windows原生的Cmd 1. 安裝 ...
- php遍历所有文件
<?php function getdir($dir){ static $str = ''; if(is_file($dir)){ $str.=$dir.'<br>'; }else{ ...
- 前端开发之jQuery效果篇
主要内容: 1.显示与隐藏效果 2.滑动效果 3.淡入与淡出效果 4.动画效果 5.弹出广告效果 一.显示与隐藏 显示与隐藏即 show() 和 hide() ,能够控制元素显示或隐藏. 实例: &l ...
- Socket.IO for Unity 简要介绍
在项目中使用到了Socket.IO for unity这个Asset Store上免费的库,这里将简要的介绍一下它的结构,已经使用中的注意事项. 目录结构 上面为包的目录结构,简单的介绍一下具体的内容 ...
- NoClassDefFoundError: net/sf/ezmorph/Morpher
使用import net.sf.json.JSONObject; json-lib-2.4-jdk15.jar时报这个错,各种查找,受到https://blog.csdn.net/chenleixin ...
- 二叉树翻转 · binary tree flipping
[抄题]: 给定一个二叉树,其中所有右节点要么是具有兄弟节点的叶节点(有一个共享相同父节点的左节点)或空白,将其倒置并将其转换为树,其中原来的右节点变为左叶子节点.返回新的根节点. 您在真实的面试中是 ...
- Linux内核分析 - 网络[十四]:IP选项
Linux内核分析 - 网络[十四]:IP选项 标签: linux内核网络structsocketdst 2012-04-25 17:14 5639人阅读 评论(1) 收藏 举报 分类: 内核协议栈 ...
- 监测IIS上网站的连接数
1.运行,输入,perfmon.msc 2.性能监视器>右侧区域>右键 添加计数器 3.在“可用计数器” 区域,选择Web Service,展开Web Service,选择Current ...
- Ubuntu 17 Nginx 配置 laravel 运行环境
1 安装 nginx #aptitude install nginx #apatitude install php7.1-fpm 2 在 /etc/nginx/sites-available 建立 s ...