关于Java包

我希望我们都同意,方法和类应该很小,并且只有很少的依赖关系。 这种观点被广泛接受,而对“小”的解释则各不相同。 关于这一点有很多文献。 但是包裹呢?

有些人将包视为名称空间。 因此,包只是允许您为类重用名称的东西!

几年前,我对方法进行了思考:只是用于可重用代码的容器。

今天,我不同意这两种说法。 方法是命名事物,将事物与其余事物分开的非常重要的工具,即使仅被调用一次也是如此。

同样,即使我们忽略名称问题,软件包也起着重要的作用。 软件包将某些功能捆绑在一起。 他们为该功能命名,应该对其进行封装,以便我们重新使用它。 就像方法一样,程序包应具有单一目的。 它可能比方法的目的“更大”,但是它仍然应该只做与该目的直接相关的事情。

不幸的是,在许多项目中,这不能很好地解决。

这是一个挑战。 从当前项目中随机选择一个软件包。 对于此软件包,请回答以下问题

  • 该软件包的目的是什么? 请使用一个简单的句子。 这句话与包裹名称相符吗?
  • 遍历该程序包的类,它们是否都共同努力以达到该类的目的? 还是那里偶然偶然地出现了课程?
  • 遍历系统的所有其他类。 他们都不关心您包裹的单一用途吗? 还是有一些类浮在其他地方,而这些地方确实应该放在您正在查看的包中?
  • 如果您在下一个项目中的同事需要基本相同的软件包,那么从您的代码库中提取该软件包并将其构建为独立的jar将有多困难?

以我的经验,上述问题的答案很可能令人沮丧。 他们肯定参与了我合作过的大多数项目。

即使该项目中的类和方法相当合理。

这是为什么?

我认为原因是程序包的问题不如方法或类明显。 如果某个方法跨越整个监视器,则您将始终看到使用该方法的所有时间。 而且由于该方法很长,因此可能需要做很多工作。 类相同。 但是跟套餐不同。 我花了整整一整天的时间在编码中,而不看包装里面的东西。 我使用快捷方式和基于名称的搜索打开类,而无需查看包内部。

因此,您不会注意到与完全不同的问题相关的类放在一个包中。 您不会注意到包中的类数超过了任何合理的阈值。

如果涉及到最后一个问题,关于依赖关系的问题将变得非常丑陋。 软件包还依赖其他哪些软件包? 哪个类包含该依赖项? 对于此类问题的工具支持非常有限。 而且问题只会在项目后期才问到,也许是当产生了一个姊妹项目时,该项目应该重用一些代码库,因此应该在一个通用的基础项目中移动。

由于我去过几次,所以建议在项目开始时使用JDepend或Dependency Finder进行一些测试:

  • 包之间没有循环依赖
  • 每个包的最大类数
  • 固定的命名架构,例如<domain>。<project>。<module>。<layer>。<package-of-package-name>
  • 模块之间的依赖关系的固定方向(模块是垂直切片,通常基于某些域概念)
  • 层之间的依赖关系的固定方向(gui,表示,域,持久性是典型示例)

但请注意:这些测试往往很难保持满意。 但是,如果您付出额外的努力来保持程序包的清洁,则会对您的应用程序结构产生重大的积极影响。

参考: 关于 Schauderhaft博客上JCG合作伙伴 Jens Schauder的软件包 。


翻译自: https://www.javacodegeeks.com/2012/05/about-java-packages.html

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

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

相关文章

python中打开文件时只允许写入的模式是_详解python中各种文件打开模式

在python中&#xff0c;总的来说有三种大的模式打开文件,分别是:a, w, r当以a模式打开时&#xff0c;只能写文件&#xff0c;而且是在文件末尾添加内容。当以a模式打开时&#xff0c;可以写文件&#xff0c;也可读文件&#xff0c;可是在读文件的时候&#xff0c;会发现读出来的…

KVM 基本硬件容量扩容

在工作当中如果虚拟机的容量不够使用 如何添加呢&#xff1f; CPU添加 cpu添加有两种方式&#xff1a; 1 创建虚拟机的时候可以添加 # virt-install --help | grep cpu--vcpusVCPUS Number of vcpus to configure for your guest. Ex:--vcpus 5--vcpus 5,maxcpus10--vcpu…

JavaFX 2.0 Hello World

在讨论示例本身之前&#xff0c;我想向您展示如何在NetBeans中创建JavaFX应用程序。 &#xff08;如果尚未安装JavaFX和NetBeans&#xff0c;请参阅我以前的文章《 安装JavaFX 2.0和NetBeans 7.7.1》 &#xff09;单击“文件”菜单中的“新建项目”以打开项目向导。 然后选择“…

java 线程强制停止线程_java多线程之停止线程

在多线程开发中停止线程是非常重要的技术点。停止线程在Java语言中并不像break语句那样干脆。须要一些技巧性的处理。一、 异常法採用异常法来停止一个线程。首先我们须要了解一下两个方法的使用方法&#xff1a;1、interrupt()方法public class MyThread extends Thread{Over…

Android 上下文菜单(Context Menu)

一、概述 Android中&#xff0c;上下文菜单是通过onLongClick(...)事件访问的。在事件触发后显示菜单项。 在使用上下文菜单时&#xff0c;通常在onCreate(...)方法中&#xff0c;先行注册上下文菜单。在实现onCreateContextMenu(...)方法和onContextItemSelected(...)方法。 注…

RGB颜色空间alpha混合的方法

http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/6445460http://www.cnblogs.com/graphics/archive/2012/08/23/2643086.htmlhttp://www.oschina.net/code/snippet_1425046_27446 转载于:https://www.cnblogs.com/eustoma/p/…

Java怪异实践

总览 Java中有许多实践使我感到困惑。 这里只是一些。 使用-Xmx和-Xms 选项-Xmx广泛用于设置最大内存大小。 如Java HotSpot VM Options中所述&#xff0c;以-X开头的选项是非标准的&#xff08;不保证在所有VM实现中均受支持&#xff09;&#xff0c;并且在以后的JDK发行版中…

saml java实现_java-saml

软件简介java-saml 是 Java 的 SAML 开发包。Maven&#xff1a;com.oneloginjava-saml2.4.0示例代码&#xff1a;Map samlData new HashMap<>();samlData.put("onelogin.saml2.sp.entityid", "http://localhost:8080/java-saml-tookit-jspsample/metadat…

双系统Ubuntu分区扩容过程记录

本人电脑上安装了Win10 Ubuntu 12.04双系统。前段时间因为在Ubuntu上做项目要安装一个比较大的软件&#xff0c;导致Ubuntu根分区的空间不够了。于是&#xff0c;从硬盘又分出来一部分空间&#xff0c;分给Ubuntu。于是有了这篇Ubuntu扩容过程记录&#xff0c;也可以当作是一篇…

使用MongoDB的MapReduce

MapReduce是Google在2004年推出的一种软件框架&#xff0c;用于支持对计算机集群中的大数据集进行分布式计算。 您可以从此处阅读有关MapReduce的信息 。 MongoDB是用C 编写的面向开源文档的NoSQL数据库系统。 您可以从此处阅读有关MongoDB的更多信息。 1.安装MangoDB。 请遵…

java epson指令集_EPSON机械手 SPEL+语言指令集

下面是全部指令的简明列表&#xff0c;放在这里方便参考。之后重要的指令&#xff0c;勇哥要拿出来单独学习。系统管理相关命令Reset 将控制器重置为初始状态。SysConfig 显示系统设置参数。SysErr 返回最新的错误状态或警告状态。Date 显示日期。Time 显示时间。Date$ 以字符串…

1、关于action中解决跨域请求问题:

&#xff08;1&#xff09;、action中使用ajax传值时HttpServletRequest request ServletActionContext.getRequest(); String origin request.getHeader("Origin"); HttpServletResponse response ServletActionContext.getResponse(); response.setContentType(…

dom contains 包含关系

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>contains</title></head><body> <div id"p-node"> <div id"c-node">子节点内容&…

ANTLR:入门

这篇文章使您了解ANTLR的基础知识。 以前&#xff0c;我们已经了解了如何将ANTLR设置为外部工具。 在这里&#xff1a; ANTLR外部工具 :) 所以&#xff0c;我们开始…。 什么是ANTLR&#xff1f; •另一个语言识别工具&#xff0c;是一种语言工具&#xff0c;它提供了一个框架…

安装JAVA8要登录_JDK8的安装及环境配置

原文链接:https://www.cnblogs.com/chenxj/p/10137221.html1、下载JDK&#xff1b;b、或百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1S14y4_3eN9G6oOVfhmbe_w提取码&#xff1a;0cf62、双击安装程序&#xff0c;点击下一步安装目录若不修改&#xff0c;可直…

【学习笔记】JavaScript基础(一)

【学习过程遇到疑问和延伸阅读】 1.document.write()的深入理解write()方法可向文档写入HTML表达式或JavaScript代码。可使用document.write()向输出流写文本或者HTML 延伸阅读《js中document.write的那点事》http://www.cnblogs.com/dh616854836/articles/2140349.html 2.编程…

js操纵cookie技术

<% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>图片浏览</title> <script typ…

java none怎么用tomcat_使用tomcat做java中间件

tomcat是一个老牌的中间件了&#xff0c;从我从业到现在时不时都会遇到它&#xff0c;方便、灵活、性能一般是我对它的使用经验总结。配置注意 &#xff1a; tomcat 7 和 6 有很大差别&#xff0c;server.xml catalina.sh 配置文件不能通用设置tomcat7 使用jdk1.7export JAVA_H…

早期访问中带有NetBeans的Oracle公共云Java服务

谁期望发生这种情况&#xff1a;Oracle正在开发公共云产品&#xff0c;并且即将开始正式启动的迹象已经出现。 在正式宣布之后将近一年&#xff0c;我被邀请加入所谓的“抢先体验”计划&#xff0c;以试驾新服务并提供反馈。 多亏负责产品的经理Reza Shafii &#xff0c;我才可…

MySQL 分组之后如何统计记录条数 gourp by 之后的 count()

SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的会是每组的记录条数.如何获得 第二个sql语句的总记录条数? 则是&#xff0c;如下&#xff1a;    select count(*) from(SELECT count(*) F…