热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅谈代码如何进行分层设计

一、分层的目标1、各分层代码边界清晰;2、后期各层之间需要更好的维护扩展。二、传统的分层MVC分层三、业务自定义分层1、业务层次分层各数据对象的分层设计2、设计结构分层关于缓存使

产生背景

业务复杂、需求不断、人员变更快、问题多等诸多原因导致项目分层混乱,服务技术是基于PaaS开发的服务定义Jstorm Topo的一个分布式服务。

存在问题

  1. 服务初始化混乱,如有通过PostConstruct注解初始化,有通过Spout的open初始化,有通过Bolt的prepare方法初始化,有通过其他一些初始化方法初始化的;    

  2. 服务没有按需初始化,例如Spout、Bolt需要的依赖数据是不一样的,分布式服务,需要根据业务需求按需初始化;

  3. 开发新需求时,很难决定类建在何处更合适,在扩展旧的需求时,经常需要稍等重构很多的代码,重复代码极其多;

  4. 缓存使用混乱,无法统计项目使用的堆内、堆外内存,且随意创建缓存,导致服务运行期间产生大量OOM;

  5. 设计模式意识淡薄,例如在写文件时,代码套用在一起,用if-else去分流逻辑,慢慢积累下来,项目硬编码极其多,往往在做新需求时才发现现有框架已不支持,导致需求完成时间骤增;

  6. 线程乱用,随意创建线程,运行期间导致线程数量暴增,在大容量下导致IO问题,为定位问题造成了很大的困难。


为什么需要好的分层设计

  1. 节省内存资源,按需初始化缓存,缩短服务初始化时间;

  2. 需求扩展时更得心应手,让新手书写功能时,知道如何更好去写代码;

  3. 更好的管理业务,不能一写需求牵一发而动全身;

  4. 好的分层设计,可以减少代码重复度,更好的减少硬编码;

  5. 好的分层设计,可以让开发人员更好的理解业务;

  6. 好的分层设计,可以让项目分工更加明确,可读性大大提升。


什么是好的分层设计

  1. 方便后续代码进行维护扩展;

  2. 分层的效果需要整个团队都能接受;

  3. 各个层职责边界清晰。


怎样做好分层设计

大部分项目分层在主体上是分为三层架构,秉持着”高内聚低耦合”的思想去设计项目的分层。横向切割,根据业务职责划分。划分的目的是规划软件系统的逻辑结构便于开发维护。要做到根据领域建模,模型之间隔离。
请求处理层(Controller层)               VO
业务逻辑层(Service层)                   BO
数据持久层(Dao层)                        DO


请求处理层:三块能力 一个是通过模板引擎渲染; 二 是 对外提供的restful接口; 三 是对上游业务提供的RPC接口
数据持久层:承载了数据存储和访问的能力,它既与底层数据进行交换,又通过Proxy的代理和包装与远程服务数据进行联动。
业务逻辑层:职责是与数据持久层交互
但随着业务的发展,微服务的拆分,分布式服务架构的盛行,三层架构逐渐无法满足业务的需要。

分层中各数据模型的解释说明:
DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象
DTO(Data Transfer Object):远程调用对象,RPC服务提供的领域模型,需保证序列化
BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象
VO(View Object):显示层对象。通常是Web向模板渲染引擎层传输的对象
DAO(Data Access objects):数据传输对象,Service或者Manager向外传输的对象
AO(Access objects):应用对象。在Web层与Service层之间抽象的复用对模型,极为贴近展示层,复用度不高

细节分层


  • 查询分层

  • 枚举分层



推荐阅读
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 初学SpringBootch06接口架构风格 RESTful
    ch06-接口架构风格RESTful1.1认识RESTful1.1.1RESTful架构风格1.2RESTful注解1.3RESTful风格的使用1.3.1加入Maven依赖1.3 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • packagetzy.template.controller;importorg.apache.shiro.authc.ExpiredCredentialsException;im ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
author-avatar
九天0307_963
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有