关于项目架构设计的一些规范

简介:

几个规范:

  1. 单元测试设计
  2. DTO 命名
  3. Web API 命名
  4. 待补充...

1. 单元测试设计

可以参考微软开源项目的单元测试,地址:https://github.com/aspnet

首先是单元测试项目创建,我们一般会对各个类库项目进行单元测试,比如 Application、Repository 等等,我们是创建一个单元测试项目呢?还是多个呢?看下 EntityFramework 中的 Test 项目:

435188-20150826172209640-2097658289.png

一般情况下,单元测试项目一一对应于要测试的项目,比如 EntityFramework.Core 对应于 EntityFramework.Core.Tests,还有一种创建方式是,整个解决方案只有一个单元测试项目,比如 EntityFramework.Tests,然后针对各个项目的测试用文件夹进行归类,哪种创建方式更好呢?简单总结下:

  • 一一对应方式:隔离性更好,单个类库测试运行更加轻快,坏处就是,解决方案项目越多的话,测试项目也就越多。
  • 大一统方式:一个测试项目对应多个类库项目,减少不必要的测试项目创建,坏处就是,解决方案项目越多的话,测试代码文件或目录会更加混乱,并且 packages 包会巨大。

我个人觉得,还是一一对应的方式比较好,毕竟一个测试项目的大小空间,并不是什么问题。

除去单元测试项目的创建,还有就是一些命名规范,大致总结下:

  • 测试项目命名:一般是在要测试类库项目的后面,加上 Tests,比如 EntityFramework.Core.Tests。
  • 测试代码文件命名:一般是在要测试类的后面,加上 Test,比如 DbContextTest。
  • 测试方法命名:下面详细说下这个。

关于测试方法的命名,在微软开源项目里是“五花八门”,我随便整几个:

  • Microsoft.Data.Entity.Tests.DbContextTest.Each_context_gets_new_scoped_services()
  • Microsoft.AspNet.Mvc.Core.Test.ActionExecutorTest.AsyncAction_TaskReturnType()
  • Microsoft.Dnx.Runtime.Tests.ApplicationEnvironmentFactsTest.GetDataReturnsNullForNonExistantKey()
  • Microsoft.AspNet.Http.Tests.FormFeatureTest.ReadFormAsync_SimpleData_ReturnsParsedFormCollection()
  • ...

哪种命名方式会比较好呢?其实没有准确的答案,但可以肯定的是,一种测试方法命名方式,在一个解决方案中必须是统一的,测试方法命名最重要的目的是,更好的表达这个测试方法要干什么,并且测试方法名称是给开发人员看的,如果你看一个测试方法名称,就知道它干的什么事,那么这种测试命名方式就是好的,如果团队协作开发一个项目的话,团队之间最好要统一起来,我个人比较倾向于上面第四种。

2. DTO 命名

DTO(Data Transfer Objects)-数据传输对象,有关 DTO 的项目及类,该如何命名呢?可以参考这篇博文:Create Data Transfer Objects (DTOs)

简单总结下:

  • DTO 项目命名:Sample.App.DTOs
  • DTO 类命名:BlogDTO

问题就是 DTO 单词是否大小写,还有就是最后的 s,以此类推,那什么情况下要加 s 呢?比如 Services、Interfaces、Controllers、Models 等等,这类项目的共同点就是,项目下面是相似类的集合,和这种情况不同的是,比如这个项目 Sample.App.Infrastructure,就没有 s。

3. Web API 命名

Web API 全称 ASP.NET Web API,Web 的项目可以命名为 Sample.App.Web,Web API 的项目改如何命名呢?三种方式:

  • Sample.App.WebApi
  • Sample.App.WebAPI
  • Sample.App.Web.API

哪种方式比较好呢?暂时没有 Google 到示例,不过,我个人倾向于第二种。


本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/4761047.html,如需转载请自行联系原作者

相关文章
|
24天前
|
设计模式 前端开发 测试技术
Flutter 项目架构技术指南
探讨Flutter项目代码组织架构的关键方面和建议。了解设计原则SOLID、Clean Architecture,以及架构模式MVC、MVP、MVVM,如何有机结合使用,打造优秀的应用架构。
Flutter 项目架构技术指南
|
4月前
|
设计模式 前端开发 Java
KnowStreaming系列教程第二篇——项目整体架构分析
KnowStreaming系列教程第二篇——项目整体架构分析
38 0
|
4月前
|
前端开发 JavaScript Java
电商4.0项目【二】: 架构搭建
电商4.0项目【二】: 架构搭建
42 0
|
27天前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
121 0
|
4月前
|
前端开发 JavaScript 数据库
Flask狼书笔记 | 09_图片社交网站 - 大型项目的架构与需求(2)
9.8 收藏图片 前面已经学习过如何使用关联表来表示多对多关系,缺点是只能表示关系,不能存储数据(如我还想记录下收藏图片的时间戳)。这种情况下,我们可以使用关联模型来表示多对多关系。 在关联模型中,我们将Photo模型与User模型的多对多关系,分离成了User模型和Collect模型的一对多关系,和Photo模型与Collect模型的一对多关系。
56 0
|
27天前
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
33 0
|
2月前
|
缓存 监控 安全
如何设计大型项目技术运营服务架构
【2月更文挑战第3天】如何设计大型项目技术运营服务架构
337 1
|
2月前
|
Java 调度 开发工具
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
174 0
|
3月前
|
存储 缓存 监控
【分布式】大型互联网项目架构目标
【1月更文挑战第25天】【分布式】大型互联网项目架构目标
|
3月前
|
数据管理 程序员 人工智能
后台数据管理系统 - 项目架构设计【黑马程序员】
后台数据管理系统 - 项目架构设计【黑马程序员】
136 0
后台数据管理系统 - 项目架构设计【黑马程序员】