当前位置: 首页>后端>正文

工业企业研发团队架构 研发团队各层级分工

一、写在前面


应用分层这件事情看起来很简单,但每个程序员都有自己的一套,哪怕是初学者。如何让一家公司的几百个应用采用统一的分层结构,并得到大部分程序员的认同呢?这可不是件简单的事情,接下来以我们真实案例与大家一起探讨,先问大家两个技术问题:


  1. 服务的调用代码你觉得放到哪一层好呢?A表现层;B业务逻辑层;C数据层;D公共层。


  1. 如何组织好VO(View Object视图对象)、BO(Business Object业务对象)、DO(Data Object数据对象)、DTO(Data Transfer Object数据传输对象)呢?

不同的人会有不同的答案,所以要统一公司应用分层,以减少开发维护学习成本。统一应用分层要可大可小、简单易用、支持多种场景,我们采用IPO方式:I是Input、O是Output、P是Process,一进一出一处理。应用系统的本质是机器,是处理设备,一进一出一处理。


工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_工业企业研发团队架构,第1张


                                                                 原理图


二、统一逻辑架构



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_命名规则_02,第2张


                                         统一应用分层的逻辑架构图


职责说明:


层英文名

中文名

说明

 

PresentationLayer

表现层文件夹

上层向用户提供服务,负责视图展示。项目类型包括WebSite、WebForm、MVC、WCF、WebService等。

 

BusinessLayer

业务逻辑层文件夹

中间逻辑处理,负责应用系统的业务逻辑的处理。

 

DataLayer

数据访问层文件夹

下层调用服务,负责数据资源提供方如数据库、SOA、OpenAPI的交互。

 

EntityLayer

实体层文件夹

VO:View Object视图对象;

DTO:Data Transfer Object数据传输对象;

BO:Business Object业务对象;

DO:Data Object数据对象;

在实际项目中,为简化设计可进行裁剪,BO和DO为可选,DTO属于服务项目类型,VO属于网站项目类型,也不会同时存在。

 

CommonLayer

公共层文件夹

工具类库,负责提供应用系统中常用的操作。

 

TestLayer

测试层文件夹

单元测试(可选),负责对其它类库的自动化单元测试。

 

 

 

 

 


  • 文件夹分层法:应用分层采用文件夹方式的优点是可大可小、简单易用、统一规范,可以包括5个项目,也可以包括50个项目,以满足所有业务应用的多种不同场景;


  • 调用规约:在开发过程中,需要遵循分层架构的约束,禁止跨层次的调用;


  • 下层为上层服务:以用户为中心,以目标为导向。上层(业务逻辑层)需要什么,下层(数据访问层)提供什么,而不是下层(数据访问层)有什么,就向上层(业务逻辑层)提供什么;


  • 实体层规约:DO是数据表对象,不是数据访问层对象,不是只能给数据访问层使用;DTO是网络传输对象,不是表现层对象,不是只能给表现层使用;BO是内存计算逻辑对象,不是业务逻辑层对象,不是只能给业务逻辑层使用 。如果仅限定在本层访问,则导致单个应用内大量没有价值的对象转换。以用户为中心来设计实体类,可以减少无价值重复对象和无用转换;


  • U型访问:下行时表现层是Input,业务逻辑层是Process,数据访问层是Output。上行时数据访问层是Input,业务逻辑层是Process,  表现层就Output。


三、我们的具体规范

提供下载的TripOrderService、TripSellerMVCSite这两个Demo来进行具体规范的说明,以下是截图:


工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_业务逻辑_03,第3张



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_工业企业研发团队架构_04,第4张


3.1、项目命名规则


项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.{项目职责英文名全称},如:Trip.Seller.DTO。


3.2、业务逻辑层的项目规范



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_实体类_05,第5张


规范说明:


1、项目名的命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.xxxBusiness,如上图的Trip.Order.Business。


2、类名以Logic结尾,如上图的OrderLogic.cs。


3.3、数据操作项目规范



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_工业企业研发团队架构_06,第6张


规范说明:


1、各数据操作项目名根据使用什么数据库进行分类,然后以DB为结尾,具体命名规则是:{产品线英文名全称}.{子系统英文名全称+应用名}.{使用什么数据库}DB,如上图的Trip.Seller.MSSQLDB。


2、如果涉及到多个数据库访问的,那么数据操作项目下的类文件需要按数据库名称(以DB为结尾)创建文件夹分开,如上图的TripOrderDB文件夹。


3、建议在应用中使用SQL语句,不使用存储过程。在数据库中不新增存储过程,但旧的存储过程可以继续使用和修改。


4、分页建议使用数据库(如SQLServer)的最新特性进行分页,并将每个分页SQL直接写到应用中。


3.4、实体类项目规范


数据传输对象DTO规范



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_命名规则_07,第7张


规范说明:


1、DTO项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.DTO,如上图的Trip.Order.DTO。


2、请求参数DTO实体类、响应DTO实体类存放规范以及其命名规则:


      a、请求参数DTO实体类放在Request文件夹下,且命名规则为:以Request结尾,如上图的SearchOrderRequest.cs。


       b、响应DTO实体类放在Response文件夹下,且命名规则为:以Response结尾,如上图的SearchOrderResponse.cs。


       c、如果请求参数DTO实体类或响应DTO实体类的属性中有对象或枚举,那么这些对象所属的类、枚举放在DTO项目的Common文件夹下。


3、如果请求参数DTO实体类、响应DTO实体类有基类要继承,那么建议为基类取名为RequestBase.cs、ResponseBase.cs。且这些基类直接放在DTO项目的Common文件夹下。


视图对象VO规范



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_命名规则_08,第8张


规范说明:


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为结尾:



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_命名规则_09,第9张


规范说明:


1、BO项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.BO,如上图的Trip.Order.BO;


2、以Model结尾,如上图的OrderModel.cs;


3、为了简化设计,BO项目为可选,可在DO项目里建文件夹。


数据对象DO规范(可选)



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_工业企业研发团队架构_10,第10张


规范说明:


1、DO项目命名规则:{产品线英文名全称}.{子系统英文名全称+应用名}.Entity,如上图的Trip.Seller.Entity;


2、如果涉及到多个数据库访问的,那么需要按数据库名称(以DB为结尾)创建文件夹分开,如上图的TripOrderDB文件夹;


3、表名+Entity结尾,如上图的OrderEntity.cs;


4、DO是数据表对象,供单表CURD操作。对于多表查询请求对象和返回对象,可定义新对象或使用现有对象(DTO/BO)来完成。


3.5、数据库连接配置规范



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_实体类_11,第11张


规范说明:


1、数据库连接的配置必须读写分离。


2、数据库连接字符串建议加密处理。


3、数据库连接配置名的命名规则:{以DB为结尾的数据库名称}_读写类型,如:


TripOrderDB_SELECT、TripOrderDB_INSERT。


3.6、配置文件方面的规范



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_业务逻辑_12,第12张



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_工业企业研发团队架构_13,第13张


规范说明:


1、所有配置文件(除Web.config文件外)都必须放到Config文件夹下。


2、所有配置文件(除Web.config文件外)按不同环境区分开,具体命名规则是:{功能模块英文名}.{环境英文简称名}.config,其中本地环境的英文简称名是Dev,测试环境的英文简称名是Test,正式环境的英文简称名是Prod,如上图的AppSetting.Dev.config。


3、保持Web.config配置文件的干净,只留环境设置节点。


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



工业企业研发团队架构 研发团队各层级分工,工业企业研发团队架构 研发团队各层级分工_工业企业研发团队架构_14,第14张


规范说明:


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是内存计算逻辑对象,不是业务逻辑层对象,不是只能给业务逻辑层使用 。如果仅限定在本层访问,则导致单个应用内大量没有价值的对象转换。以用户为中心来设计实体类,可以减少无价值重复对象和无用转换。”


 


问:应用分层范例代码的编写需要注意些什么?


答:应用分层范例的代码要想写好,非常不容易,很容易引起争议,很难让所有人满意


https://www.xamrdz.com/backend/36c1960931.html

相关文章: