按功能而不是按层打包课程

大多数企业Java应用程序在设计上都有一些相似之处。 这些应用程序的打包通常由它们使用的框架(如Spring,EJB或Hibernate等)驱动。或者,您可以按功能对打包进行分组。 像其他任何有关建模的项目一样,这也不是没有任何问题。 让我们讨论一些权衡以及如何解决它们。 在这篇文章中,我们将讨论两种方法在常见使用场景下的利弊。

逐层封装(PBL)

这是开发人员在创建企业应用程序时将其拆分为多个层(如DAO,SERVICE,VIEW等)时要做的第一件事。
当我们在不同的层使用不同的框架时,代码分离。 例如,如果我要使用Hibernate,Spring和JSF,那么我的所有Hibernate依赖代码将在DAO层中,而JSF相关的代码将在VIEW层中。 万一我只需要在视图层或DAO层上迁移到新框架,这很好。

按功能打包(PBF)

逐功能包使用程序包来反映功能集。 它将与单个功能(仅该功能)相关的所有项目放置在单个目录/程序包中。 这导致包装具有高内聚性和高模块化性,并且包装之间的耦合最小。 紧密协作的项目彼此相邻放置。 它们不会散布到整个应用程序中。 这也增加了一致性,因为一个类的依赖性的很大一部分位于该类附近。

比较方法

让我在下面的维度中比较这两种方法。

1.添加新功能。

在必须将PBL代码添加到VIEW,SERVICE和DAO层的情况下,这可能很麻烦。 PBF通过将与同一功能相关的所有代码分组到一个目录中来解决此问题。

2.更改所使用的框架。

如前所述,由于所有相关代码都保存在同一位置,因此PBL使更改框架变得更加容易。 在这里,我们确切地知道更改的范围及其影响。 对于PBF,我们需要深入研究所有功能集以查看与框架相关的类。 如果选择逐模块迁移框架模块,则可能会认为PBF比PBL更好。

3.代码导航。

由于开发人员大多数时候需要使用这些功能,因此使用PBF进行代码导航更加容易。 当您确切知道该做什么时,它没有太大的优势。

4.保留通用代码。

每个应用程序都将具有一些组件,这些组件将在功能中重复使用,即,这些功能并不总是排他的。 在这种情况下,如果我们分别打包所有功能,则它们之间的交互可能会非常混乱。 作为一般原则,我们需要减少这种相互作用并增加包装内部的凝聚力。 我们可以通过将此类实体添加到通用包中来解决这种情况。 在包括Hibernate在内的许多项目中都使用了这种方法。

结论

大多数应用程序将具有4种类型的类。 即

  1. 域对象
  2. 商业服务
  3. 数据检索逻辑
  4. 数据表示逻辑

如果我们使用PBF,它将为我们提供良好的结构表示,但不会提供任何功能表示。 我们需要我们的体系结构以类似于问题域。 因此最好使用“按功能打包”样式。 我们可以使用诸如MyFeatureDAOMyFeatureService之类的命名约定在内部对类进行分类。 这样我们就可以传达课程的意图。

我发现了有关此主题的一些讨论,希望对您有所帮助。

  1. Java实践文章
  2. Hibernate核心实现的经验教训
  3. 更改Java包名称如何改变我的系统架构
  4. 演讲者:Kostis Kapelonis
  5. OOD的原理Bob叔叔
  6. 文章说它更好地按层使用软件包
  7. 关于SO的问题按功能打包是否良好?

参考:在The Object Oriented Life博客中, 按功能而不是按层打包来自我们JCG合作伙伴 Manu PK的类。

翻译自: https://www.javacodegeeks.com/2013/04/package-your-classes-by-feature-and-not-by-layers.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总是助手服务器失败怎么回事,《遇见逆水寒》连接服务器失败解决方法汇总 服务器连接失败问题原因...

导读遇见逆水寒连接服务器失败怎么回事,近期不少小伙伴都在反映遇见逆水寒助手连接服务器失败,一直登不上去是怎么回事,小编这就为大家分享下遇见逆水寒连接服务器失败解决方法。遇见逆水寒连接服务器失败解决方法...遇见逆水寒连接服务器失败…

Linux常用开发环境软件-redis安装

linux下安装redis3.2.11版本  1、安装编译环境 yum install gcc  //安装编译环境 2、到官网下载redis 官网地址:https://redis.io/download 3、用WinScp工具,将下载好的redis-3.2.11.tar.gz传输到linux服务器下的opt目录下(opt就相当于window的d://so…

项目第十一天

站立式会议: 燃尽图: 项目: 项目进展:系统完成,进行测试。 问题:测试的时候发现不知道如何进行系统的测试,所以测试内容的比较乱。 体会:从无到有完成一个项目,需要很多步…

JPA:确定关系的归属方

使用Java Persistence API(JPA)时,通常需要在两个实体之间创建关系。 这些关系是通过使用外键在数据模型(例如数据库)中定义的,而在我们的对象模型(例如Java)中则使用注释来定义关联…

服务器芯片镜像测试,模拟镜像服务器磁盘问题的两个测试【转】

我们知道在高安全模式下,在主服务器上提交的事务必须同时在镜像服务器上提交成功,否则该事务无法在主数据库上提交。在上面的图中,一个事务在主数据库上提交的步骤包含:客户端程序将事务发送给主数据库服务器SQLServer主数据库服务…

运用Arc Hydro提取河网

Arc hydro 插件需要 spatial analyst 支持: 解决方法:Tools菜单>>Extensions...,勾选Spatial Analyst 1.设置存储路径 ApUtilities-set target locations 2.导入dem 3.拼接dem Dataset Name 设置为.tif,即存为tif格式,否则…

服务器性能是什么,什么是服务器性能的显卡,怎么理解?

什么是服务器性能的显卡,怎么理解?如果单说“”二字就是个伪命题,服务分不同的性能级别,有些刀片器的性能甚至还不如某些发烧级的游戏台式机,那它所用的显卡性能也会比较一般,如果是说哪些显卡是专门为服务…

打印机网络共享服务器不稳定,共享打印机无法访问怎么办,教你一招问题立马解决...

基本上只有本地打印机共享才会出现下面的问题,通过网线连接和打印机服务器连接的打印机不会出现此类问题,多个电脑连接网络打印机本质上还是各个电脑连接的本地打印机。一、 设置打印机共享时出现错误连接好本地打印机后,想要共享给同事使用&…

CSS margin 外边距 属性的位置关系

padding:内边距margin :外边距 margin:10px; 所有 4 个外边距都是 10px ******************************************* margin:10px 5px; 上外边距和下外边距是 10px右外边距和左外边距是 5px ******************************************** margin:10px…

C语言博客作业--字符数组

一、PTA实验作业 题目1:7-1 字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明。 这个问题我看了好久,试了很多的的错误点,答案和我预料的一样,所以我重新看了一遍…

Java 7 Update 21安全改进的详细信息

甲骨文昨天发布了三个Java更新 。 重要的是要注意它们包含一些与安全性相关的更改。 一段时间以来,已经宣布了其中的大多数更改,并且首先要注意的是Oracle按计划交付。 甲骨文公司Java平台安全经理Milton Smith最近在DevoxxUK上做了题为“ 用Java保护…

du的原理 linux_Linux 文件系统管理

1、文件系统介绍1)、Linux 文件系统特性super block(超级块)记录整个文件系统的信息。包括 block 与 inode 的总量,已经使用的 block 和 inode 的数量,未使用的 block 和 inode 的数量,block 与 inode 的大…

box-shadow IE8兼容处理

根据canisue&#xff08;http://caniuse.com/#searchbox-shadow&#xff09;&#xff0c;box-shadow兼容性如下图所示&#xff1a; 测试代码&#xff1a; 1 <!DOCTYPE html>2 <html>3 4 <head>5 <meta charset"UTF-8">6 …

ECharts.js学习(一) 简单入门

EChart.js 简单入门 最近有一个统计的项目要做&#xff0c;在前端的数据需要用图表的形式展示。网上搜索了一下&#xff0c;发现有几种统计图库。 MSChart 这个是Visual Studio里的自带控件&#xff0c;使用比较简单&#xff0c;不过数据这块需要在后台绑定。 ichartjs 是一款…

金蝶云系统显示服务器离线,金蝶云服务器已离线是什么情况

金蝶云服务器已离线是什么情况 内容精选换一换根据是否支持挂载至多台云服务器可以将磁盘分为非共享磁盘和共享磁盘。一个非共享磁盘只能挂载至一台云服务器&#xff0c;而一个共享磁盘可以同时挂载至多台云服务器。共享磁盘是一种支持多个云服务器并发读写访问的数据块级存储设…

分布式是什么意思_机架式ups是什么意思?与分布式DPS有何不同之处?

ups电源很多人听过了&#xff0c;主要是让设备在突然断电的情况下遭遇停电的损坏&#xff0c;保障数据及重要程序运行。那么&#xff0c;机架式ups电源可能就是很多人不太了解的了&#xff0c;在说到与分布式DPS有何不同之处那是很少有人清楚了解了&#xff0c;不管怎么说&…

【原】老生常谈-从输入url到页面展示到底发生了什么

刚开始写这篇文章还是挺纠结的&#xff0c;因为网上搜索“从输入url到页面展示到底发生了什么”&#xff0c;你可以搜到一大堆的资料。而且面试这道题基本是必考题&#xff0c;二月份面试的时候&#xff0c;虽然知道这个过程发生了什么&#xff0c;不过当面试官一步步追问下去的…

WebApi在MVC 4中一个Controll多个post方法报错处理

http://blog.csdn.net/lqh4188/article/details/53542400&#xff08;原创&#xff09; 转载于:https://www.cnblogs.com/william-CuiCui0705/p/8023832.html

关于文件关联的图标不能正常显示

不知道有没有人遇到过这种情况&#xff1a; 这两种情况都是关联的图标不能正常显示&#xff0c;但是可以正常打开。总觉得看着挺碍眼的&#xff0c;就看了下注册表&#xff0c;发现可以用以下方法解决&#xff1a; 打开注册表&#xff0c;[HKEY_CLASSES_ROOT]找到需要修改的文件…

华为畅享8plus停产了吗_牢记华为手机“三不买”原则,不花冤枉钱,选错要吃亏!...

如今华为手机已经占据国内手机市场份额的半壁江山&#xff0c;华为自然也就成为了买手机的首选。那么华为手机真的好吗&#xff1f;我认为应该理性看待&#xff0c;因为每个手机品牌都有好手机也有差手机&#xff0c;其实买华为你只需要牢记“三不买”原则&#xff0c;就可以不…