用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启动调试,我们整个项目的架子基本搭建完毕。