一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了。好吧,就叫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. python博客

    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

  2. python twilio 短信群发 知识留存

    1. win7 32位系统,傻瓜安装Anaconda2(python 2.7) 2. 打开cmd, 输入命令pip install twilio,在线安装twilio 3. 打开Anaconda2的S ...

  3. leetcode131

    深度优先遍历(DFS),先判断前一个部分是否是回文,如果是,则将其加进集合中,然后继续判断后面的回文串. 在回溯的时候,将之前加入集合的串删除,重新选择回文串.每到达一次叶子节点,得到一组结果. pu ...

  4. 控制 TextBox 的滚动条

    利用 EM_LINESCROLL 信息控制 TextBox 的卷动. 在含有卷动轴的 TextBox 中, 如何以程序控制 TextBox 的卷动? 传送 EM_LINESCROLL 信息给 Text ...

  5. rook 删不掉的问题

    # kubectl get crd -o yamlapiVersion: v1items:- apiVersion: apiextensions.k8s.io/v1beta1  kind: Custo ...

  6. Matlab界面清洗

    保持干净清爽的编程界面可以给人以简洁明朗的享受,Matlab可以对涉及到的4个界面进行清洗: ①  Clear Figure ; ② Clear Command window; ③ Clear Wor ...

  7. SQLSERVER的四个系统数据库

    (1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息.这些系统信息包括所有的登录信息.系统设置信息.SQL Server的初始化信息和其他系 ...

  8. day24,python习题

    今日作业 有两个列表,分别存放来老男孩报名学习linux和python课程的学生名字 linux=['钢弹','小壁虎','小虎比','alex','wupeiqi','yuanhao'] pytho ...

  9. Python 中的POST/GET包构建以及随机字符串的生成-乾颐堂

    现在,我们来用Python,创建GET包和POST包. 至于有什么用处,大家慢慢体会. Python 中包含了大量的库,作为一门新兴的语言,Python 对HTTP有足够强大的支持. 现在,我们引入新 ...

  10. 中介者模式c#(媒婆版)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace 中介者模式{  ...