我的架构经验系列文章 - 后端架构 - 设计层面

简介: 回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html   设计层面:   分层架构 分层架构是项目设计中很重要的一点,从根本的目的上来说就是为了职责的分离。

回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html

 

设计层面:

 

  • 分层架构

分层架构是项目设计中很重要的一点,从根本的目的上来说就是为了职责的分离。最经典的三层架构,到四层五层六层,甚至有人开玩笑说十八层的分层,根据项目的需要可以分不同的层。这里说的层其实是逻辑层,从物理层的角度来说也有三层、四层五层的分层架构。之所以三层架构这么流行是因为它的分层把大的关注点进行了分离,层数恰到好处,表现层、业务逻辑层和数据访问层,分别处理面向用户呈现的、面向逻辑处理的和面向数据库存取数据的三大关注点。

  1. 在分层架构中除了分层之外还需要对每一层都提取出自己需要的模型,比如表现层的视图模型、业务逻辑层的业务模型或领域模型以及数据访问层的实体,当然如果还有服务层的话还有服务层的契约或数据传输对象。带来的一个问题就是这些实体或模型之间怎么进行转换,当然最简单可靠的办法就是手写代码进行赋值,如果对象中的字段属性超过10个的话就会让人崩溃,因此现在有很多映射Mapper类库可以用来实现各个不同模型之间的转换。
  2. 分层分的好不好直接影响了系统代码的清晰性和可读性。有的人会问,我使用了三层结构无非就是上层调用下层,改了数据库字段的话还要同时改三层这是多麻烦的事情啊?其实之所以会有这样的疑问是因为:首先,你的项目不够大,或者说逻辑实在是太简单了,导致你的代码中就是上下级的调用。其次,即使你把所有的代码都混在了一起,改了数据库的字段也是需要修改SQL语句的也是需要修改参数校验规则的也是需要修改界面来多呈现这个字段的,其实要改的东西没有少改只不过代码都混在了一起,觉得好像改的地方不多罢了。第三,修改数据库字段这种操作其实对于一个稳定的系统来说不会经常发生,往往我们会改界面会改逻辑,这样的话如果有分层我们只需要修改相应层的代码就可以了,如果每一层是单独分程序集或分jar包编译的话,那么我们甚至只用进行组件的替换。
  3. 虽然说三层架构很简单,但是要真正落实三层架构的分离理念其实不是这么容易的。举一个例子,同样是对字段判断必须是数字的这个操作,应该在表现层写还是业务逻辑层写还是数据库层写?我们要明确,每一层都只是做自己层职责上的事情,不应该去越权,并且要做的事情一定要做好。首先这个判断每一层都要进行,表现层脚本和代码验证,履行好表现层的职责,业务逻辑层也不能因为表现层验证了就不验证,业务逻辑层不关心表现层做了什么,参数不符合类型就提出了,同样数据访问层对于数字类型的参数就要确保是数字类型的确保在为参数设置了正确的类型。心理很清楚每一个层需要负责的事情,也要很清楚每一层只关心自己的事情,这样就能把正确的代码写在正确的位置了。

 

  • 高内聚低耦合

高内聚低耦合是一个很重要的设计理念,其实这个理念大家都知道但是怎么样能让这个理念在代码中落实?我觉得可以抓住下面几个原则,这几个原则始终记在脑子里面即可:

  1. 任何一个方法都检查一遍是不是只做了一件事情。如果一段代码又在做界面展现,又有SQL语句,或是又在处理员工的工资又在处理员工的考勤,那么往往表示这段代码做了过多不是自己的事情了。它或许应该分成两个方法,甚至是不同类型的两个方法。
  2. 任何一个类型都检查是不是只做了一件事情。这是非常重要的一个检查,如果一个类型做了太多的事情,很明显你没有对类型的职责进行一个明确的划分(当然这个类型就是来负责协调的作为门面类型例外),请检查类中的所有功能是不是符合类名,如果一个类型叫做NetworkingAdapter而其中有处理XML的代码的话显然不合适,是否应该使用其它继承的类型来处理XML,或者是使用类似于策略模式来处理不同的数据?
  3. 任何一段代码都检查是不是只在一个地方出现。这也是非常重要的一个检查,往往我们可以用这一条金标准来做重构。如果一段代码在多处出现要么这是一段和业务无关的代码,可以AOP解决,要么就有大问题了,一段相同的业务逻辑在多个地方出现,一旦业务逻辑有改有多少人知道要改两个甚至更多的地方,很明显应该把代码提取出来封装在一个地方。
  4. 任何一个类型都检查是不是依赖过多的类型。除非是门面类型否则一个类型应该不会依赖过多的类型,暂且不说类型的依赖可以通过IOC来解决,如果一个类型依赖了过多的类型,它就会和其它类型进行比较多的强耦合。可以考虑使用门面模式来梳理类型之间的关系,尽量减少和太多的类型之间发生关联。
  5. 如果一个类型都检查是不是依赖的类型也同样依赖自己。如果产生这种双向依赖的话,建议使用中间人来处理两个类型之间的依赖,不要让两个类型相互调用相互依赖。在有的时候我们可以考虑类型A把数据写到一个地方,类型B从这个中间点去获取数据然后进行处理处理后还是把结果存在这个中间点,类型A再从这个中间点获取结果。这样的话A和B其实没有很强的依赖,大家都依赖中间点获取结果,即使把B替换成C只要它最终输出的东西是大同小异的那么A就不需要修改。

 

  • 设计模式

所有的设计模式其实都是前人在大量的编程实践后总结出来的,每一个模式都有适用的地方,每一个模式都是解决一个问题的,因此针对设计模式我的建议如下:

  1. 应该对每一个设计模式都了解,然后你自然可以想到在合适的时候使用合适的模式。
  2. 不要去滥用设计模式,好的设计模式可以增强代码的高内聚低耦合也可以让代码对扩展友好,但设计模式滥用可能会导致代码的性能问题以及不必要的编码。
  3. 作为开发gof的设计模式应该熟读,只是读还不够,自己想办法去在今后的编码过程中体会应用设计模式,如果一个设计模式没用那么他就在书上,如果用了那么他就在你脑子里。

 

  • 面向对象

面向对象的三大要素许多人也是熟读在心了,但是个人认为要彻底明白面向对象三大要素是需要大量OO实践积累的。对于过程式的开发其实是结果导向的,这比较容易理解。但OO开发其实是维护导向的,通过OOD后开发出来的代码是比较容易进行扩展的,也是可以支撑复杂业务的。对一套好的OO代码进行扩展可能门槛会比较高,因为每一个对象都有自己的职责,需要理清楚对象之间的关系,一旦入手了就会发现非常爽的感觉。可以大量利用系统内已经实现的类型,如果继承和重写实现自己的需求,然后还可以通过实现接口把自己的实现插到原有的OO体系中去,也就是可能只需要几行代码就可以对系统进行改造。对于没有OO的代码改造上手不一定很困难,因为代码很直白,但是一旦进行几十次改造之后代码就没有可维护行了,因为所有的代码都交织在一起,而且会有大量的硬编码(面向结果的代码特点就是可能从上到下很多地方都可以改,而且可以实现相同的效果,一旦这么做了可能就会导致原来的逻辑被破坏,代码可维护性降低)。对于OO的学习我的体会是:

  1. 可以从设计模式入手,设计模式是OO的一个总结,学习了设计模式有助于理解OO的三大理念。
  2. 可以多阅读优秀的框架或类库的代码,优秀的开源框架一定是对扩展友好的,因此它的设计往往是非常OO的,通过阅读改造开源代码可以提升OOD的能力。
  3. 多重构多思考,根据上面提到的高内聚低耦合中说的那些问题想办法去重构代码,你会发现很多优化只能通过OO的手段进行,思考重构然后再重构来进步。

 

 

作者: lovecindywang
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章
|
16天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
22 0
|
1月前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
5天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
23天前
|
存储 缓存 监控
构建高效可扩展的后端服务架构
在当今互联网时代,构建高效可扩展的后端服务架构对于企业的业务发展至关重要。本文将探讨如何通过合理设计和优化后端服务架构,实现系统的高性能、高可用性和易扩展性,从而满足不断增长的业务需求和用户规模。
18 0
|
26天前
|
监控 Java 开发者
构建高效微服务架构:后端开发的新范式
在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业技术战略的关键组成部分。本文深入探讨了微服务的核心概念,包括其设计原则、技术栈选择以及与容器化和编排技术的融合。通过实际案例分析,展示了如何利用微服务架构提升系统性能,实现快速迭代部署,并通过服务的解耦来提高整体系统的可靠性。
|
2天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
7天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
10天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。
|
23天前
|
Kubernetes API 开发者
构建高效微服务架构:后端开发的新范式
在数字化转型的浪潮中,微服务架构已成为许多企业追求敏捷开发、持续交付和系统可维护性的关键解决方案。本文将深入探讨微服务架构的设计原则、技术选型以及实践案例,为后端开发者提供一套构建和维护微服务系统的实用指南。
|
27天前
|
消息中间件 监控 API
构建高效微服务架构:后端开发的新趋势
在现代软件开发中,随着业务需求的多样化和系统复杂性的增加,传统的单体应用已经难以满足快速迭代和灵活部署的需求。本文将探讨如何通过构建高效的微服务架构来应对这些挑战,包括微服务的定义、优势、关键组件以及在实际应用中的设计原则和最佳实践。我们将深入分析微服务架构如何在保证系统可维护性和扩展性的同时,提高开发效率和系统的响应速度。

热门文章

最新文章