一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了。好吧,就叫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 做一个小功能(三) 项目搭建的更多相关文章

  1. 用MVC5+EF6+WebApi 做一个小功能(二) 项目需求整理

    在一个项目开始前,需求整理大概要占到整个项目周期15%甚至30%的比重,可以说需求理得越清楚,后续开发中返工几率越小.在一个项目中,开发新功能的花费的精力要远远小于修改功能的精力,这基本是一个共识.老 ...

  2. 用MVC5+EF6+WebApi 做一个小功能(四) 项目分层功能以及文件夹命名

    在上一节,我们完成了一个项目搭建,我们看到的是一个项目的分层架子,那接下来每一层做什么以及需要引用哪些内容呢?在本节内容我们还逐步拆分每一层的功能,顺带添加package包 Trump.Domain ...

  3. 用MVC5+EF6+WebApi 做一个小功能(一)开场挖坑,在线答题系统

    从哪开始说呢,这几年微软的技术一直在变,像是牟足了劲要累死所有的NET程序员,从WebForm到MVC到现在MPA.SPA .Razor单页,从net2.0一直走到现在.net4.6.2,后面还有一个 ...

  4. 用MVC5+EF6+WebApi 做一个考试功能(五) 前端主题

    内容概述 前面絮絮叨叨没正事,到现在为止也没有开始写代码,不过在考虑下貌似这一节还是开始不了. B/S架构开发有一个特点,就是用浏览器打开,不同的用户群体可能有不同的风格,不论是管理平台还是普通的网站 ...

  5. 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类

    前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...

  6. 使用PixiJS做一个小游戏

    PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...

  7. 用RecyclerView做一个小清新的Gallery效果 - Ryan Lee的博客

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

  8. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  9. 我的第一个netcore2.2 api项目搭建(三)

    上一章快速添加了swagger文档管理功能,我的第一个netcore2.2 api项目搭建(二) 这一章实现目标三:api添加身份验证功能 在实现该目标之前,先得理解netcore运行机制. 这是微软 ...

随机推荐

  1. WPF DatePicker 默认显示当前时间

    两种方法: 1.通过后台赋值: this.datePicker.SelectedDate = DateTime.Now; 2.前台控件的属性直接赋值 xmlns:sys="clr-names ...

  2. 搭建 redis 集群 (redis-cluster)

    一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis  redis下载地址 ...

  3. django一对一数据库建立和进行数据传输的3种方式all()(对象) values()(字典) values_list()(元组)

    class Business(models.Model): caption = models.CharField(max_length=32) code = models.CharField(max_ ...

  4. web.xml中配置spring.xml的三种方式

    我们知道spring在web.xml中可以有三种方式来配置其xml路径:org.springframework.web.servlet.DispatcherServletorg.springframe ...

  5. centOs 安装NPM 记录

    1. 关闭npm严格认证 npm config set strict-ssl false

  6. 2017面向对象程序设计(Java)第六周学习总结

    转眼间,2017年的法定节日已经休完,我们的java学习也已经进行了六周.下面,我将对上个礼拜的学习情况进行总结. 首先,是学习态度问题.虽然同学们已经从家或者各个旅游景点回来,但是心还是没回来.有同 ...

  7. ios 获取当前wifi名称

    ios5之前可以通过读取配置文件获取,ios5以后苹果修改wifi列表文件位置,只有root权限才可以读取. ios4:/System/Library/SystemConfiguration/WiFi ...

  8. sqlserver2008事物处理---待续

    声明事物:begin tran 回滚事物:ROLLBACK TRAN 提交事物:commit tran(不写会隐式提交) 判断是否发生异常: 结束前: IF @@ERROR <> 0 BE ...

  9. DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器

    DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...

  10. 第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8

    基于键盘与鼠标应用的程序设计 一.实验目的 1.掌握键盘与鼠标在应用程序中的消息响应机制.   二.实验内容及步骤 实验任务 1.熟悉键盘的消息响应: 2.熟悉鼠标的消息响应: 实验内容 设计一个窗口 ...