`
raymond.chen
  • 浏览: 1437065 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在项目架构中如何进行分层才是最合理的?

    博客分类:
  • Java
阅读更多

     目前很多项目在框架搭建时都遵循以下的分层关系:View层、Action层、Service层、Dao层。在Service层和Dao层中,一个接口文件对应一个实现类,无论是大项目还是小项目,都按照这个模式去做,说这是软件架构的标准做法。本人觉得,一个接口文件对应一个实现类这样做有很多缺点:

     1)创建的文件数量太多。

     2)增加了开发人员的工作量。

     3)增加了后期维护的复杂性。

     4)程序调试不方便。

其实,Service层和Dao层的接口文件完全可以去掉的,只需要具体类就可以了,而且Dao层也不是必须的,可以作为可选层来处理。当Service层的一些方法需要在多个地方引用时,才增加Dao层,用于存放这些公共方法。

 

     SpringSide就是这样做的,不知道大家的看法如何?

  • 大小: 44.1 KB
  • 大小: 30.7 KB
分享到:
评论
35 楼 rola 2008-09-23  
我是觉得,分成Action,Service,Dao的思想的主要原因是DAO主要完成单表的一些增,删,改,主要给Service调用(重用了),Service代表着业务操作,Facade就是在这里起作用,更重要的是,事务必须起停在业务操作中
34 楼 rola 2008-09-23  
确实,Action+Service+Dao让人难受,如果有增加功能接口的话,上上下下都得改,针对比较简单的项目,我会把Service+Dao合并,就让Mmodel和Controler用一个类来实现,中间辅以业务接口,也能体现MVC的思想!
如今看看Seam,确实受启发,连Entity都可以充当VO了,那么SessionBean完成Model+Controler的功能也就能接受
33 楼 ztka 2008-09-23  
chen-516888 写道
.................
Spring AOP对接口的动态代理类是通过Java Reflection 生成的
如果只是对类生成动态代理类,则使用CGLIB,效率稍微会低一些.

接口和实现分开是为了实现抽象化和实现的分离,使得实现可以动态的改变
你的应用中不需要考虑这样的问题,不代表这样不好

至于能不能"去掉",视具体情况而定吧.完全的话...个人觉得太绝对了

你的DAOImpl如果是基于MySQL和一些特有的东西,有一天你的系统数据库
迁移到Oracle,并且使用了Oracle的一些特性,只需要实现新的DAOImpl代替
原来的DAOImpl就可以了.如果没有接口和实现的分离,就很麻烦了,
可能需要大量修改业务层的代码.
个人拙见




太理想化了,一般来说从mysql迁移到oracle,改动的比这个多的多,基本和数据库打交道的都要重写。
32 楼 mycybyb 2008-09-23  
chen-516888 写道
.................
Spring AOP对接口的动态代理类是通过Java Reflection 生成的
如果只是对类生成动态代理类,则使用CGLIB,效率稍微会低一些.

接口和实现分开是为了实现抽象化和实现的分离,使得实现可以动态的改变
你的应用中不需要考虑这样的问题,不代表这样不好

至于能不能"去掉",视具体情况而定吧.完全的话...个人觉得太绝对了

你的DAOImpl如果是基于MySQL和一些特有的东西,有一天你的系统数据库
迁移到Oracle,并且使用了Oracle的一些特性,只需要实现新的DAOImpl代替
原来的DAOImpl就可以了.如果没有接口和实现的分离,就很麻烦了,
可能需要大量修改业务层的代码.
个人拙见




请问,这个DAOImpl在整个系统中是不是只有一个。还是像楼主的图中那样,一个service对应一个dao?谢谢。
31 楼 mycybyb 2008-09-23  
fish2007 写道
  DAO层为什么作为可选层呢? 你把对数据库的访问和逻辑的处理都放在service层, 不觉得很乱吗。
  对于接口,DAO层的接口,我觉得是可选的,但是service层的接口还是有必要的。在项目中,有很多不期而遇的变化,当你使用了接口,那么你的实现类的变化,就不会对外界产生任何影响。


处理逻辑应该放在service层吧。
访问数据应该放在DAO层,但访问什么样的数据还是应该有service决定吧,DAO应该只是执行而已,并对执行结果进行一定的转换。这样DAO整个系统就只有一个啊,不需要每个service都对应一个DAO。而且这一个DAO对外提供的是一个接口,具体内部是用JDBC还是hibernate,service不需要关心。
30 楼 simonli 2008-09-23  
我同意楼主的观点。简单就好
29 楼 fish2007 2008-09-23  
  DAO层为什么作为可选层呢? 你把对数据库的访问和逻辑的处理都放在service层, 不觉得很乱吗。
  对于接口,DAO层的接口,我觉得是可选的,但是service层的接口还是有必要的。在项目中,有很多不期而遇的变化,当你使用了接口,那么你的实现类的变化,就不会对外界产生任何影响。
28 楼 java55 2008-09-23  
CALM 写道
ltian 写道
要是框架做的好,绝大多数情况下,Dao层只需要接口,不需要写实现类。做到不到这点,说明公司里面的构架师还需进一步努力。

没看明白,能详细讲讲么,怎么个不写实现类啊?

其实就是所有的实现都在框架的某个最高层的类中实现了增删改查的操作,然后以后的所有的dao实现只要extend就可以了,而不需要每次都重新再写实现了
27 楼 melode11 2008-09-23  
yangwudong 写道
低耦合,高复用
就这六个字,足够解释的了

那就解释解释纯粹的接口抽取,复用高在哪里?
26 楼 freej 2008-09-23  
简单说两句:

我认为,在满足项目本身灵活性要求的前提下,分层或者说继承要尽量的少。分清职责,多用组合。这样才能使系统更加清晰,维护更加方便。
25 楼 yangwudong 2008-09-23  
低耦合,高复用
就这六个字,足够解释的了
24 楼 fastzch 2008-09-23  
<div class='quote_title'>raymond.chen 写道</div>
<div class='quote_div'>其实,Service层和Dao层的接口文件完全可以去掉的</div>
<p><br/>同意这个。</p>
23 楼 CALM 2008-09-23  
ltian 写道
要是框架做的好,绝大多数情况下,Dao层只需要接口,不需要写实现类。做到不到这点,说明公司里面的构架师还需进一步努力。

没看明白,能详细讲讲么,怎么个不写实现类啊?
22 楼 withoutmewang 2008-09-22  
增加了开发和维护负担? 增加了多少? 跟spring有关?
为啥不只写jsp呢,那样文件最少了!

可测试性是个非常重要的衡量因素
21 楼 kaka2008 2008-09-22  
抛出异常的爱 写道

2我认为接口是用来写注释的地方
对于程序来说越短越好,但接口就可以写很多.
可以把你的需求定义,用例都写到接口里面.



恩恩,有收获
20 楼 zean 2008-09-22  
同意LZ的看法,我们项目也有这样的毛病,归根结底是太过教条、对接口认识的不足,这样的接口实际上毫无意义,增加了开发和维护负担。
19 楼 DaemonChen 2008-09-22  
分层还是有必要的。对于团队来说。可以明确目标与任务。至于要不要DAO层,还是要看项目大小与开发周期。接口的作用在于定义规范,可移植性也会提高。实现也会更加灵活。
18 楼 nwangwei 2008-09-22  
用Hibernate,基本上大小项目都不需要DAO层了
17 楼 zhenjia 2008-09-22  
你给我的感觉就是觉得service 和dao 没必要同时存在,没必要去对应那些接口。
dao,和数据直接打交道
service,通过dao实现业务逻辑
你可直接实现动态dao
那样的话你就只剩下service了
http://www.iteye.com/topic/232885类似我实现的这样
16 楼 fenxue 2008-09-22  
但是,我现在做过的几个项目来看,接口定义是非常有必要的,以后有需要重构的地方,运用比较好的设计模式,就会让你受益的。

相关推荐

    基于的.net的分层架构

    在IT行业中,构建高效、可扩展且易于维护的软件系统是至关重要的。基于.NET的分层架构是一种常用的设计模式,...阅读“基于.NET平台的分层架构实战.pdf”这样的资料,可以帮助你更深入地理解如何在实践中应用这些概念。

    DotNet分层

    在IT行业中,分层架构是一种常见的软件设计模式,它将复杂的应用程序分解为多个相互独立、职责明确的层次。在DotNet开发环境中,分层架构是实现可维护性、可扩展性和可重用性的关键策略。本文将深入探讨DotNet分层...

    项目架构思想

    在IT行业中,项目架构思想是构建复杂软件系统的关键要素,它涉及到如何组织和设计软件的各个部分,以实现高效、可扩展和易于维护的目标。本文将深入探讨项目架构的几个核心概念,结合“源码”和“工具”的标签,我们...

    C#分层思想之实例项目详解

    总的来说,C#分层思想是软件工程中的重要概念,通过合理划分各层,可以使项目更易于管理,提高开发效率。在实际项目中,根据需求和团队规模,还可以考虑添加其他层次,如服务层、缓存层等,以优化系统性能和架构。

    02-架构分层:我们为什么一定要这么做?_For_group_share1

    在软件开发领域,架构分层是一种常见的设计模式,它有助于管理和组织复杂的系统结构,确保代码的可读性、可维护性和可扩展性。当我们谈论"02-架构分层:我们为什么一定要这么做?"时,这个问题的核心在于理解分层...

    基于WCF的项目架构

    在本文中,我们将深入探讨基于WCF的项目架构,以及如何利用其特性构建高效、可扩展的服务。 **一、WCF基础概念** 1. **服务**: WCF服务是提供特定功能的实体,通过接口(合同)与客户端进行交互。服务可以实现一种...

    分层架构体系研究1

    分层架构体系是一种常见的软件设计模式,用于组织和管理复杂系统的结构。3/N 层架构是一种多层架构模型,常用于构建...在实际项目中,理解并巧妙地应用这些架构模式,对于构建稳定、高效且易于维护的软件系统至关重要。

    基于.NET 平台的分层架构实战

    **配置**:在.NET项目中,通常通过配置文件或代码来定义依赖关系,例如使用Unity框架进行依赖注入配置。 **实现缓存操作辅助类**:为了提高性能,可以实现缓存操作辅助类`CacheAccess.cs`,用于处理缓存逻辑。 **...

    基于Java与SpringBoot框架的分层架构设计源码实战教程

    该项目是一份基于Java与SpringBoot框架的分层架构设计源码实战教程,包含28个文件,涵盖11个XML配置文件、8个Java源文件、4个YAML配置文件、1个Git忽略文件、1个LICENSE文件、1个Markdown文件、1个Chat文件和1个SQL...

    高手系列!谈单片机程序设计中的“分层思想”

    尤其是在复杂的工程项目中,合理地运用分层设计可以有效地管理软件架构,提高开发效率和代码质量。对于单片机开发者来说,掌握分层思想是非常有益的,它不仅能帮助解决实际项目中的问题,还能提升个人的技术水平。

    基于项目的分层教学法在技校PLC课程教学中的应用.pdf

    总的来说,基于项目的分层教学法为技校的PLC课程教学提供了新的视角和实践路径,通过细分学生层次、设定分层教学目标、合理安排学习任务、科学实施项目教学以及客观公正地进行学生评价等环节,可以极大地提升技校...

    分层开发教程

    在本教程中,我们将关注如何进行分层开发,特别是针对SQL数据库和C#编程语言。 首先,分层开发通常包括以下四个主要层次: 1. **表现层(UI)**:这是用户与应用交互的界面,负责接收用户输入、显示输出和处理用户...

    基于.NET平台的分层架构实战

    本文概述了基于.NET平台的分层架构在NGuestBook项目中的应用。通过合理地规划需求、设计数据库、组织层次结构、实现实体类、定义接口以及运用依赖注入等技术,可以构建出高度模块化、易于维护和扩展的应用程序。这种...

    基于.NET平台的分层架构实战(完整资料).doc

    在实际项目中,需求分析和数据库设计至关重要。对于NGuestBook系统,需求包括:访客留言、管理员审核、评论功能、管理员权限管理等。数据库设计涉及管理员表、留言表、评论表等,需明确实体和关系,如管理员与留言...

    单片机程序设计里的“分层思想”

    在单片机程序设计领域,采用合理的架构和设计思想对于提升程序的可维护性、扩展性和效率至关重要。“分层思想”是一种非常有效的程序设计策略,它可以帮助开发者更好地组织代码,提高代码的复用率,并简化复杂系统的...

    .NET分层开发的几点心得

    本文将围绕.NET平台下采用分层架构进行应用开发的一些关键点进行探讨,尤其关注三层架构(表现层、业务逻辑层、数据访问层)在ASP.NET项目中的实践。 #### 一、数据实体层(Entity)的实现 数据实体层主要负责数据的...

    分层教学法在职业院校单片机教学中的应用.pdf

    应用分层教学法在单片机课程中,首先需要对学生进行分层,根据他们的学习现状以及对任务所需知识的掌握程度,将学生分为提高层、中间层和基础层。分层后,将学生合理搭配到小组中,并选择小组长。接着是任务分层,...

    C语言之嵌入式系统软件架构思想

    而在C语言中,模块化设计与分层思想是构建稳定、可维护软件架构的关键。 ### 模块划分的重要性 模块划分指的是将大型软件项目分解为若干个功能独立的模块,每个模块负责一部分特定的功能,通过接口与其他模块交互...

    asp.net BBS源码 分层实现

    在本源码中,开发者将业务逻辑、数据访问和用户界面进行了分离,以达到更好的软件工程实践。 1. **分层架构详解** - **表现层(Presentation Layer)**:这是用户与应用交互的界面层,通常包括ASP.NET Web页面、...

    C#经典分层收费系统源代码实例

    通过学习这个C#经典分层收费系统源代码实例,你不仅可以熟悉C#编程,还能了解MVC模式的工作原理,掌握如何使用分层架构来组织复杂的项目。此外,还能学习到如何处理数据库交互,以及如何实现业务逻辑。对于想要提升...

Global site tag (gtag.js) - Google Analytics