设为首页 加入收藏

TOP

中小研发团队架构实践之统一应用分层(二)
2019-09-17 19:04:08 】 浏览:83
Tags:中小 研发 团队 架构 实践 统一 应用 分层
esponse结尾,如上图的SearchOrderResponse.cs。
       c、如果请求参数DTO实体类或响应DTO实体类的属性中有对象或枚举,那么这些对象所属的类、枚举放在DTO项目的Common文件夹下。
3、如果请求参数DTO实体类、响应DTO实体类有基类要继承,那么建议为基类取名为RequestBase.cs、ResponseBase.cs。且这些基类直接放在DTO项目的Common文件夹下。
  • 视图对象VO规范

规范说明:
1、VO项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.ViewModel,如上图的Trip.Seller.ViewModel。
2、各VO实体类,我们用Controller名作为文件夹名进行分开,如上图的Order文件夹。
3、VO实体类名的命名建议:
     a、请求参数VO实体类以Input/Form/Query结尾,如上图的SearchOrderInput.cs。
     b、响应VO实体类以Output/List/Result结尾,如上图的SearchOrderOutput.cs。
  • 业务对象BO规范(可选)

BO实体类名以Model为结尾:
规范说明:
1、BO项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.BO,如上图的Trip.Order.BO;
2、以Model结尾,如上图的OrderModel.cs;
3、为了简化设计,BO项目为可选,可在DO项目里建文件夹。
  • 数据对象DO规范(可选)

规范说明:
1、DO项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.Entity,如上图的Trip.Seller.Entity;
2、如果涉及到多个数据库访问的,那么需要按数据库名称(以DB为结尾)创建文件夹分开,如上图的TripOrderDB文件夹;
3、表名+Entity结尾,如上图的OrderEntity.cs;
4、DO是数据表对象,供单表CURD操作。对于多表查询请求对象和返回对象,可定义新对象或使用现有对象(DTO/BO)来完成。

3.5、数据库连接配置规范

规范说明:
1、数据库连接的配置必须读写分离。
2、数据库连接字符串建议加密处理。
3、数据库连接配置名的命名规则:{以DB为结尾的数据库名称}_读写类型,如:
TripOrderDB_SELECT、TripOrderDB_INSERT。

3.6、配置文件方面的规范

规范说明:
1、所有配置文件(除Web.config文件外)都必须放到Config文件夹下。
2、所有配置文件(除Web.config文件外)按不同环境区分开,具体命名规则是:{功能模块英文名}.{环境英文简称名}.config,其中本地环境的英文简称名是Dev,测试环境的英文简称名是Test,正式环境的英文简称名是Prod,如上图的AppSetting.Dev.config。
3、保持Web.config配置文件的干净,只留环境设置节点。

3.7、静态资源文件方面的规范

规范说明:
1、公共的静态资源文件(css、js、image等)放在另外的静态站点中,统一由前端进行开发和维护。一般,css文件放在css文件夹下,js文件放在js文件夹下,image图片文件放在img文件夹下。
2、与某项业务有关的js文件可以放到各自业务项目的表现层PresentationLayer下,以方便开发人员调试,js文件可放在项目的js文件夹下。
3、静态资源文件必须使用版本号管理,以防更新后由于客户端浏览器缓存而导致站点使用的依然是旧版本的静态资源文件:
<script src="~/js/order.js?v=@AppSetting.StaticFileVersion"></script>

四、写在最后

4.1、问题回答

问:服务的调用代码应该放到哪一层呢?
A表现层、B业务逻辑层 、C数据层、D公共层。
答:我们的规范是统一放到数据资源访问层即C。上层提供服务,下层调用服务,中间处理业务逻辑。
 
问:如何组织好VO(View Object视图对象)、BO(Business Object业务对象)、DO(Data Object数据对象)、DTO(Data Transfer Object数据传输对象)呢?
答:通常有两种做法,限定访问范围和不限定访问范围,实际项目中可根据需要选择、折中或裁剪。我们使用后者,将EntityLayer作为通用对象放到左侧,具体可参考实体层规约:“DO是数据表对象,不是数据访问层对象,不是只能给数据访问层使用;DTO是网络传输对象,不是表现层对象,不是只能给表现层使用;BO是内存计算逻辑对象,不是业务逻辑层对象,不是只能给业务逻辑层使用 。如果仅限定在本层访问,则导致单个应用内大量没有价值的对象转换。以用户为中心来设计实体类,可以减少无价值重复对象和无用转换。”
 
问:应用分层范例代码的编写需要注意些什么?
答:应用分层范例的代码要想写好,非常不容易,很容易引起争议,很难让所有人满意。我们在具体实践时遵循以下几点:
  1. 应用分层范例的主要价值是明确层的职责和交互,每个层的职责是什么,哪些要干,哪些不要干,以及层与层之间依赖和交互;
  1. 私人定制:减少通用帮助类的编写,如果每一个应用中有大量相同的帮助类,这在架构层面上是有问题。在我们的几百个线上应用中,尽管减少通用的代码,包括分页帮助类、数据库帮助类、缓存帮助类、MQ帮助类、日志帮助类、AOP帮助类、线程帮助类。业务应用的重点是为业务服务,每一个应用都是特别的,都需要私人定制,极少有通用的代码,如果有,那么应该由框架或组件专门解决;
  1. 少即是多:应用的场景多,参考人员多,每个人想法不同,牵涉的时间长,所以尽量只做大家都认同的规范、正确的事情,要自底向上、要减少有争议的代码范例,否则一个错误将会放大百倍、一个有争议的规范将会很难推行。
  1. 追求简单:代码编写可分为三个层次,简单、复杂、简单。第一简单是不知道的简单,第二个复杂是知道后的复杂,第三个简单是知道后有取舍的简单。范例代码要追求简单,既可轻松扩展支持复杂场景,又要简单到初级程序员也能操作。
  1.  内聚大于解耦:内聚是什么,内聚是部门内有共同的目标,然后大家紧密合作。解耦是什么,解耦是部门间各自职责明确,然后减少不必要的连接。一个应用如同一个部门,应有一个共同的目标和职责,然后大家紧密合作。换句话说,应用内部应减少不必要契约接口(如同公司间才签约合同),减少不必要的依赖注入实现,减少不必要且代价过大的解耦。一切以简单实用为主,以应用价值输出、应用的目标(接口或界面)为导向。

4.2、Demo下载

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇基于python自动化测试平台与虚拟.. 下一篇【模板】计算组合数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目