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

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

Trump.Domain

在这一层,主要是定义领域模型,咱们前面也说,Domain是不依赖任何层的,惟一可能存在的依赖也就是外部的帮助类库了。因此这一层不须要咱们进行单独处理引用关系的。浏览器

在这一层咱们主要定义一些实体和实体的行为,为了解决方案树看着清爽一些,咱们分别添加几个文件夹保存对应的内容app

  • Entiies:保存实体类
  • IRepository:保存仓储接口(后面有空单独说仓储,这里就是保存的每一个实体对应的行为)
  • T4:用来保存T4文件,后面会用到T4进行实体类的生成

基本这些就够了。若是有须要咱们在单独添加,其实T4那个文件夹如今加不加均可以。编辑器

 

Trump.EF

在这一层,咱们进行数据持久化操做,咱们将使用Entity Framework 6+Sql Server这个组合来进行数据持久化,同时咱们要实如今Domain层定义的仓储接口,还有就是在这一层还会使用Migration进行数据迁移,使用Fluent Api 来进行数据关系的配置,因此这一层的文件以下:性能

  • Common :放咱们将会用到的公用类,好比提取出来的公共仓储类
  • EntityConfig:涉及到实体类的关联关系配置,咱们使用Fluent Api来定义实体之间的关系
  • Migrations:启用数据迁移后,自动生成的文件,没必要手动建立
  • Repository:仓储实现类
  • XXXDbContext.cs:既然使用EF进行数据操做,必然会有一个数据上下文类,咱们项目较小,就不给它本身单独搞个文件夹了,很差找

基本就这些文件夹。再看咱们在EF可能会用到的类库,测试

  • Entity Framework :这个确定不用思考,微软给的这个ORM走过了这么多年性能什么的应该不是大问题了(猜想,我没有测试过,勿拍)。

就这个就能够了,其余的不是必须的,咱们用的时候再添加就能够了。这里注意,nuget安装包EntityFramework有一个对应的EntityFramework.zh-Hans,一并安装上吧,这样在代码编写的时候就能够看到继承的中文提示了优化

最后,在EF层,咱们继承了Domain 的仓储接口,同时也会引用Domain的实体类,因此须要依赖Domain项目。右键添加项目引用便可插件

 

Trump.Application

在这一层,咱们是为了隔离UI层与EF层之间的关联,数据模型流转以下Entity→Dto→Model,其中Entity→Dto的转换就是在这一层完成的。同时咱们还会把一些在页面模型中没有完成的模型组装在这里进行完。这一层文件夹以下:设计

  • Common:公共类,一些基类,接口什么的
  • Dtos:数据传输对象,把Entity转换成Dto,而后扔给UI层
  • IService:应用层接口,也有人把这个文件夹单独拿出去的,咱们就不折腾了搞的项目比项目功能都多何须呢
  • Service:应用层实现。

其实,若是往三层上靠的话,应用层就有点相似原来的BLL层,干些没技术含量的活,可是咱们在这里非要搞出来一个接口和一个实现的方式,这个并非为了高大上,后续咱们会讲到Ioc的时候会用到,同时咱们在Domain中引入了T4,这块的不少代码都是能够生成的,因此不用纠结日志

看一下须要引用的Nuget包:

  • AutoMapper:数据转换全靠它了,这个听说性能不是很好,可是也没什么好的替代品
  • Newtonsoft.Json:Json序列化的,个别时候会用到。

Trump.ExamApp

最后来到UI层,用户看到的那一坨屎同样的东西都集中在这里了。这一层要调用Application获取数据,进行展现,把用户提交的表单发送给Application而后到EF层进行持久化。

这一层文件夹在建立项目的时候已经基本都完备了,看一下这一层的引用,梳理一下咱们要用的技术

  • AutoMapper:帮忙进行Dto→Model的转换
  • Newtonsoft.Json:Json序列化用到
  • Swagger.Net、Swagger.Net.UI、Swashbuckle、Swashbuckle.Core:用来作Api在线文档的,后续Api的时候单独讲
  • log4net:老牌日志组件,看着说明书基本很容易配置使用了
  • bootstrap:如今版本3.xxx~~~~~~
  • jQuery:这个注意有三个系列,1.xx、2.xx、3.xx 根据客户端兼容性需求选择不一样版本,同时会影响到页面处理时候插件的选择,慎重,原来有过不当心给升级了版本致使各类客户端各类不兼容。
  • Datatables:列表组件
  • jsTree:树形结构
  • select2:可搜索过滤的下拉框
  • sweetalert2:浏览器alert消息的替代
  • jsrender:个别时候页面中重复数据绑定
  • ueditor:富文本编辑器,百度出品,貌似不维护了,基本也还稳定,功能都能知足,最主要的是有中文文档和示例
  • icheck、bootstrap-touchspin等:页面上功能的小优化,加强用户体验

 

整理项目结构截图以下:

QQ截图20180117102705

全部准备工做基本完毕。下一步就能够开始了。

比较纠结,我我的习惯是在整理需求的时候画原型,而后设计数据模型,基本就是页面设计→模型设计→逻辑处理→功能串联→测试微调的开发思路。

可是由于这个是从项目中提出来的,需求已经弄完了并且不少代码也完了,这个有点不知道从哪开始了。

整理整理思路在继续,并且第一次想写一个实战的文章,才发现好难啊~

相关文章
相关标签/搜索