精华内容
下载资源
问答
  • java包装项目 程序包是Java的基本概念,是您开始用该语言编程时偶然发现的第一件事。 作为一个初学者,您可能不太关注软件包的结构,但是随着您成为经验丰富且成熟的软件开发人员,您开始考虑可以采取哪些措施来...

    java包装项目

    程序包是Java的基本概念,是您开始用该语言编程时偶然发现的第一件事。 作为一个初学者,您可能不太关注软件包的结构,但是随着您成为经验丰富且成熟的软件开发人员,您开始考虑可以采取哪些措施来提高其效率。 有几个主要选项需要考虑,选择正确的选项可能不是一个显而易见的选择。 本文应该为您提供常用策略的概述。

    我们为什么使用包裹?

    从语言的角度来看,Java包提供了两个重要的功能,编译器可以利用它们。 最明显的一个是类的名称空间定义。 几个名称完全相同的类可以在一个项目中使用,只要它们属于不同的包即可将一个类与另一个类区分开。 如果您无法想象如果没有包,该语言将是什么样子,那么请看一下JavaScript世界中的模块化策略。 在ES2015之前,没有官方标准,而且命名冲突并非罕见。

    第二件事是,程序包允许为项目的特定成员定义访问修饰符。 对于不同包的成员,可以限制或完全禁止类,接口或其成员(如字段和方法)的可访问性。

    编译器首先使用这两个功能来实施语言规则。 对于干净的编码人员和软件技术人员而言,软件包的主要属性可能具有有意义的名称,该名称描述了软件包的用途和存在的原因。 对于编译器,这只是一个随机的char字符串,而对于我们来说,这是表达我们意图的另一种方式。

    什么是包裹?

    官方的Java教程中,我们可以找到以如下形式开头的定义:

    程序包是一个命名空间,用于组织一组相关的类和接口。 从概念上讲,您可以将软件包视为类似于计算机上的不同文件夹。 您可以将HTML页面保留在一个文件夹中,将图像保留在另一个文件夹中,并将脚本或应用程序保留在另一个文件夹中。 (...)

    第一句话强调软件包的组织目的。 但是,该定义并未说明应将哪种关系类和接口视为一个单独的组。 这个问题向所有软件开发人员开放。 最近,肯特·贝克(Kent Beck)写了一条一般性建议,该建议也适用于本文中讨论的主题:

    但是,就像上述包装定义中的“相关”一词一样,“相似”一词对不同的人可能具有完全不同的含义。 在本文的其余部分,我们将在软件包组织的背景下考虑可能的选择。

    逐层包装

    项目类之间最普遍公认的相似之处可能是他们的责任。 使用此属性进行组织的方法称为逐层打包或水平切片,实际上,其外观或多或少类似于下图。

    如果您没有机会从事具有这种结构的项目,则可以在一些框架教程中找到它。 例如,Play框架建议在2.2版之前使用这种方法。 Angular.js的教程最初建议根据其职责将事物保持在一起。

    他们改变了对主题的看法,并更新了教程,这可能会让您思考是什么原因。 但是在判断解决方案之前,让我们先看一下它的优缺点。

    优点

    考虑到分层体系结构是使用最广泛的体系结构,开发人员旨在在包结构中反映所选体系结构也就不足为奇了。 这种方法的长期流行会影响将结构应用到新项目中的决定,因为团队的新手更容易在他们熟悉的环境中采用他们。

    在此类应用程序中为新类找到合适的位置实际上是理所当然的操作。 该结构是在开发之初创建的,并且在整个项目存在期间都保持不变。 这种简单性使得即使经验不足的开发人员也可以使项目保持秩序,因为结构易于理解。

    缺点

    有人说将所有模型类放在一个位置使它们更易于重用,因为它们可以与整个包一起简单地复制到另一个项目中。 但是真的是这样吗? 特定域模型的形状通常仅在项目内的有限上下文中有效。 例如,产品类别在购物应用程序中将具有与管理制造商订单的应用程序不同的属性。 即使您想使用相同的类,也有必要将它们提取到每个应用程序中标记为依赖项的单独jar中。 即使存在于独立但相关的项目中,代码重复也会导致错误,因此我们应避免粘贴粘贴。

    逐层打包方法的主要缺点是过度使用了公共访问修饰符。 现代的IDE默认情况下使用public修饰符创建类和方法,而不会强迫开发人员考虑使用更合适的选项。 实际上,在分层包组织中没有其他选择。 仅将存储库公开给单个服务类,就要求该存储库是公共的。 副作用是,项目中的所有其他类都可以访问该存储库,即使是不应该与其直接通信的层也可以访问该存储库。 这种方法鼓励创建无法维护的意大利面条代码,并导致包装之间的高度耦合。

    如今,无论它们在何处,都可以在IDE中的已连接类之间轻松切换,但为新功能添加新的类集需要更多的注意。 当类分布在多个目录中时, 仅通过查看代码很难评估功能的复杂性

    一开始,我们说过程序包的名称应提供有关其内容的其他详细信息。 在逐包方法中,所有程序包都描述了解决方案的体系结构,但是它们分别没有提供任何有用的信息。 实际上,在许多情况下,它们会复制其成员的类名中显示的信息。

    按功能包装

    在硬币的另一面,您可以围绕要素或领域模型构建类。 您可能已经听说过这种方法是垂直切片组织。 如果仅使用水平切片,乍一看可能看起来有些混乱,但是最后这只是心态问题。 下图表示与上一段相同的类,但包装布局不同。

    您可能不会仅仅因为左脚适合同一只脚而将所有左脚鞋放在一个位置,而另一只脚就放在另一位置。 您要成对穿着鞋子,因为那是您使用鞋子的方式。 同样,您可以查看项目中的类。

    垂直切片的核心思想是将构建特定功能的所有类放在单个程序包中。 遵循此规则,您将获得一些好处,但同时也会面临一些负面后果。

    优点

    当所有要素类都放在一个程序包中时,public access修饰符更具表现力,因为它允许描述要素的哪一部分应由应用程序的其他部分访问。 在包内,您应该赞成使用package-private修饰符来改善模块化。 最好在IDE中修改默认模板,以避免创建公共类和方法。 公开一些东西应该是一个有意识的决定。 来自不同程序包的类之间较少的连接将导致更简洁,更可维护的代码库。

    在水平切片中,程序包在每个项目中具有相同的名称集,而在垂直切片方法中, 程序包具有更有意义的名称,这些名称描述了它们的功能用途 仅通过查看项目结构,您就可以猜测用户可以使用该应用程序做什么。 该方法还表达了要素之间的层次关系。 域的聚合根很容易识别,因为它们存在于程序包树的最低层。 包结构记录了应用程序。

    根据功能对类进行分组可以使程序包更小,更容易浏览。 在横向方法中,每个新功能都会增加图层包中类的总数,并使它们更难浏览。 在长长的类列表中找到有趣的元素将成为一种低效率的活动。 相比之下, 仅当扩展了功能时关注该功能的软件包才会增长 新功能在树的适当节点中接收其自己的包。

    还值得一提的是垂直切片包装的灵活性。 随着微服务架构的日益普及,拥有已经按功能分割的整体应用程序绝对比将项目按层组织的项目更容易转换成单独的服务。 采用按功能打包的方法可以为应用程序的可扩展性增长做好准备。

    缺点

    随着项目的发展,软件包的结构需要更多的注意。 重要的是要了解,随着应用程序变得越来越复杂,程序包树会随着时间而发展。 您有时会不得不停一会儿,并考虑将程序包移动到其他节点或将其拆分为较小的节点。 结构的清晰度不是免费的。 团队负责保持其良好状态,并与该领域的知识保持一致。

    了解领域是清洁项目结构的关键要素。 为新功能选择合适的位置可能会遇到问题,特别是对于团队新手来说,因为这需要您应用程序背后的业务知识。 某些人可能会认为这是一种优势,因为这种方法鼓励团队成员之间共享知识。 向该项目介绍新的开发人员比较耗时,但可能会被视为一项投资。

    混合方式

    您可能认为四肢没有好处。 我们难道不能仅从两种方法中取最大的优点,并创造介于两个极端之间的新质量吗? 有两种可能的组合。 程序包的第一层被一层划分,要素是它们的子级,要素建立在顶层,层是它们的子节点。

    第一种选择是您可能遇到的,因为它是增长到大尺寸包装的常见解决方案。 它增加了结构的清晰度,但是不幸的是,逐层封装方法的所有缺点都像以前一样适用。 最大的问题是,仍然必须在几乎所有地方都使用public修饰符,以连接您的类和接口。

    使用另一个选项,我们应该问一个问题,该解决方案是否真的有意义。 按功能打包的方法支持层的组织,但它是在类级别上而不使用package的 通过引入其他级别的软件包,我们将失去利用默认访问修饰符的能力。 我们在结构上也没有获得太多简化。 如果功能包增长到难以管理的大小,则提取子功能可能更好。

    摘要

    在开始新项目时,选择包结构是您必须要做的第一选择。 该决定会影响整个解决方案的未来可维护性。 尽管从理论上讲,您可以在任何时间点更改方法,但是通常,这种转移的总成本只会阻止这种转移的发生。 这就是为什么在开始时与整个团队花费几分钟并比较可能的选择尤为重要的原因。 一旦做出选择,您要做的就是确保每个开发人员都遵循相同的策略。 对于按功能打包的方法来说,这可能会比较困难,特别是如果是第一次使用,但是好处列表绝对值得努力。

    如果您对垂直切面有任何经验,并且想在主题中增加两分钱, 请随时在评论中分享您的想法 另外,请考虑与您的同事分享该帖子。 阅读您的讨论结果和对该方法的感受将是很棒的。

    翻译自: https://www.javacodegeeks.com/2017/07/project-package-organization.html

    java包装项目

    展开全文
  • java项目经验包装简历指南
  • 这篇文章是关于Java包装类型详解,java的基础知识非常多,但是只要条理清晰地整理,一个知识点一个知识点捋清楚,就能很好地掌握,今天讲的java包装类型,也是我们几乎天天都能用到的java基础知识点,需要理解清楚。...

    这篇文章是关于Java包装类型详解,java的基础知识非常多,但是只要条理清晰地整理,一个知识点一个知识点捋清楚,就能很好地掌握,今天讲的java包装类型,也是我们几乎天天都能用到的java基础知识点,需要理解清楚。基本类型是沿用面向过程开发语言的特性,如c语言,它非常计较程序内存占用的情况,但随着技术日新月异的发展,存储空间越来越大,这点已经改观,转而在意程序的开发便捷性,大型项目构建的支持。为何会这样呢?

    从我电脑的配置大家就可以看出趋势。1998年我拥有了我的第一台电脑。奔腾PII 自己DIY组装的电脑,记忆犹新,当时超前的配置,今天来看太陈旧了。3条32m总共96m内存,昆腾4.3g火球硬盘。而我现在的联想ThinkPad x270笔记本, 16g内存,三星512g SSD固态硬盘。

    a0504e5b02d240c5d6d15acd47efa6fb.png电脑的配置

    可以看出技术革新的变化,随之程序也发生变化,推出了面向对象编程,面向对象编程推崇是类是对象。

    java中的基本数据类型int,double等不是对象,无法通过向上转型获取到Object提供的方法,而像String却可以,只因为String是一个对象而不是一个类型。基本数据类型由于这样的特性,导致无法参与转型,泛型,反射等过程。

    388f3ca3ef2e78a1b03c7dc6d113101e.pngjava

    例如:泛型<>只支持引用类型 ReferenceType为了弥补这个缺陷,java提供了包装类。

    2. 包装类

    Wrapper Class包装类:

    8caa1f0036293629cef1194b29ddbe9c.png

    可以看出java是两种类型相结合的产物,各有特长,那实际开发中如何使用呢?大家可以先简单记忆一下它的规则,日后我们开发中都遵循这个原则:

    在方法体内部尽量使用基本类型,占空间小,用完就释放内存,节约内存在pojo时尽量使用包装类型,例如mybatis持久层框架就必须使用包装类型,否则可能出错哦。(先记忆下来,后期讲到mybatis框架,大家可以验证)

    387c44b33113d59828dbc358382571fa.pngjava

    3.最大值最小值

    package javase.basetype;import org.junit.Test;public class TestValueLimit {@Testpublic void testNumber() {System.out.println("\n==整形值类型==================");byte minByte = Byte.MIN_VALUE;byte maxByte = Byte.MAX_VALUE;System.out.println("byte 取值范围:"+ minByte + "~"+maxByte);short minShort = Short.MIN_VALUE;short maxShort = Short.MAX_VALUE;System.out.println("short 取值范围:"+ minShort + "~"+maxShort);int minInteger = Integer.MIN_VALUE;int maxInteger = Integer.MAX_VALUE;System.out.println("int 取值范围:"+ minInteger + "~"+maxInteger);long minLong = Long.MIN_VALUE;long maxLong = Long.MAX_VALUE;System.out.println("long 取值范围:"+ minLong + "~"+maxLong);}@Testpublic void testFloat() {System.out.println("\n==浮点值类型==================");float minFloat = Float.MIN_VALUE;float maxFloat = Float.MAX_VALUE;System.out.println("float 取值范围:"+ minFloat + "~"+maxFloat);double minDouble = Double.MIN_VALUE;double maxDouble = Double.MAX_VALUE;System.out.println("double 取值范围:"+ minDouble + "~"+maxDouble);}}执行结果:==整形值类型==================byte 取值范围:-128~127short 取值范围:-32768~32767int 取值范围:-2147483648~2147483647long 取值范围:-9223372036854775808~9223372036854775807==浮点值类型==================float 取值范围:1.4E-45~3.4028235E38double 取值范围:4.9E-324~1.7976931348623157E308==字符值类型==================char :a~a~b~b

    4.装箱拆箱

    装箱:将基本数据类型封装为包装类对象

    Integer i = 10; //装箱,10整数,i是包装类型Integer i = new Integer(10); //编译后

    拆箱:将包装类中包装的基本数据类型数据取出

    Integer i = 10; //自动装箱int j = i; //自动拆箱int j = i.intValue(); //编译后

    注:JDK1.5之后提供自动拆装箱,我们使用时可以互相赋值,代码简洁

    关于Java包装类型详解就讲 这些,主要理解包装类型和基本类型的自动装箱和自动拆箱,能明白为什么编程语言要这么设计就可以了。

    展开全文
  • 企业找不到?...(适合包装项目经验的人群) ps:无奈Java市场已经被搞垮,趋于市场不得不适应市场的生存法则,走上包装的道路。如果我们能够联合起来,企业TMD就不会拒绝这么应届生,源头还是企业的锅。
  • 构建Java项目4.1 gradle构建Java流程4.2 定制gradle的Java项目5.构建Web项目5.1使用war插件5.2定制war插件5.3 使用嵌入式容器Jetty运行5.4 定制Jetty插件6. Gradle包装器6.1 配置包装器6.2 使用包装器6.3 定制包装器...

    1.定制项目结构

    Gradle默认项目结构 就是Maven的项目结构

    • src/main/java放应用源代码
    • src/main/resources 放配置文件
    • src/test/java 放测试代码

    在build.gradle中添加如下代码

    //应用源代码位置
    sourceSets {
        main{
            java {
                srcDirs =['src/java']
            }
        }
    //测试源代码文件
        test{
            java{
                srcDirs =['src/test']
            }
        }
    }
    

    如图:这里自定义的目录
    在这里插入图片描述

    2.定制项目输出路径

    在build.gradle中添加如下代码

    buildDir="out"  //这里表示输出路径是out文件,默认是build文件,上图也可见
    

    3.配置和使用外部依赖

    在build.gradle中添加如下代码

    //仓库
    repositories {
        mavenCentral()
    }
    
    //依赖]
    dependencies {
        compileOnly 'org.projectlombok:lombok:1.18.2'
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    

    4.构建Java项目

    4.1 gradle构建Java流程

    在build.gradle中添加如下代码
    步骤一:

    apply plugin : 'java'
    

    这一行代码就可以让Gradle自己去找java的源文件,默认是src/main/java目录去找,如果要修改见上面的定制还有输出目录

    **步骤二:**新建一个Java项目(需要主类一个包含Main方法)
    **步骤三:**执行gradle build命令,这样会生成一个build目录包含class文件和libs以及临时文件,我这里是定制的输出用的out目录
    在这里插入图片描述

    步骤四: 执行命令java -cp out/classes/main com.vison.ToDoApp
    执行main方法(com.vison.ToDoApp表示你的主类地址)这是通过执行class文件来执行的

    4.2 定制gradle的Java项目

    在上面的基础上,在build.gradle中添加如下代码

    version '1.0-SNAPSHOT'
    sourceCompatibility = 1.8  //设置Java版本编译兼容1.8
    //指定main位置
    jar{
        manifest {
            attributes 'Main-class':'com.vison.ToDoApp'
        }
    }
    

    然后重新gradle clean ,gradle build 会看到项目会生成带有版本号的jar文件
    可以通过java -jar out/libs/ToDoGradle-1.0-SNAPSHOT.jar 包可以执行文件中的main方法。

    5.构建Web项目

    5.1使用war插件

    **步骤一:**在build.gradle中添加如下代码

    //war插件,表示生成一个war包, war应用默认目录是src/main/webapp(js.css.html文件目录)
    apply plugin : 'war'
    //依赖,用原始的servlet,这里注意providedCompile ,runtime  表示configuration,和maven中的scope雷同
    dependencies {
        providedCompile 'javax.servelt:servlet-api:2.5'
        runtime 'javax.servlet:jstl:1.1.2'
    }
    

    **步骤二:**构建web项目
    使用默认的目录如下:
    在这里插入图片描述

    **步骤二:**执行命令gradle build会在build/libs中生成war包(war插件来执行的)war包任务将目录src/main/webapp内容原封不动的拷贝到WAR包的根目录下,编译后的class文件最终是会放到WEB-INF/classes中,通过依赖定义的包会放在WEB-INF/lib中。如下WAR包中的文件
    在这里插入图片描述

    5.2定制war插件

    如果我们不是用默认的web项目目录,如下使用这个目录结构
    静态资源放在static中,原来的webapp改为了webfiles目录

    在这里插入图片描述
    步骤:在build.gradle中添加如下代码

    webAppDirName='webfiles'   //修改web应用源目录位置
    
    war{
        from 'static'  //将static目录添加到WAR根目录下
    }
    
    
    5.3 使用嵌入式容器Jetty运行

    **步骤一:**在build.gradle中添加如下代码

    apply plugin : ‘jetty’
    

    步骤二: 执行命令gradle jetty run 就可以了

    5.4 定制Jetty插件

    修改端口和上下文路径

    jettyRun{
        httpPort =9090
        contextPath='toDoList'  //这个表示新的项目地址名访问的地址http://localhost:9090/toDoList  访问该项目
    

    6. Gradle包装器

      由包装器支持的gradle脚本非常适合自动化发布过程的一部分,比如持续集成。主要是避免团队开发gradle版本不一样,其他队员从代码仓库中上拉取代码要让gradle版本在本地开发相同。

    6.1 配置包装器

    步骤一: 在build.gradle中添加如下代码

           task wrapper(type:Wrapper){
    			gradleVersion ='4.4'  //gradle版本
    		}	
    

    步骤二: 本地执行命令 gradle wrapper
      这个命令会默认从Gradle的微类库中下载gradle包并解压
      另外下载完了你的本地会生成在$HOME_DIR/.gradle/wrapper/dists目录,你的项目中也会有一个wrapper目录;还有gradlew 和gradlew.bat两个脚本文件。

    • gradlew 这个是*nix的执行包装器shell脚本
    • gradlew.bat这个windows的执行包装器脚本
    6.2 使用包装器

    使用上面这两个脚本例如windows环境执行 gradlew.bat jettyrun
    linux环境中 执行命令gradlew.bat jettyrun运行jetty容器

    6.3 定制包装器

    通常公司都是用自己的内网,所以gradle可以定制url下载,当然还有很多特性可以定制可以查看下官网内容。

    task wrapper(type:Wrapper){
        gradleVersion ='4.4'   //请求的版本
        distributionUrl ='http://myenterprise.com/gradle/dists' //获取gradle包装器的url
        distributionPath = 'gradle-dists' //包装器被解压后存放的相对路径
    }
    
    展开全文
  • 电力项目、交通灯管理系统、银行业务调度系统、在线支付、宅急送项目 全套视频 百度网盘:https://pan.baidu.com/s/1oFZ8aabxkJRqtVMd7Jlg5g 提取码:kgol

     电力项目、交通灯管理系统、银行业务调度系统、在线支付、宅急送项目 全套视频

    百度网盘:https://pan.baidu.com/s/1oFZ8aabxkJRqtVMd7Jlg5g

    提取码:kgol

    展开全文
  • TDLib(和TDLight)的准Java包装器 该包装器使您可以直接访问Java中的TDLib API。 要求 JVM:Oracle JVM或OpenJDK Java版本:Java 11,12,13,14,15 作业系统:Linux,Windows,macOS 支持的CPU体系结构:amd...
  • 默认Java Selenium项目 在扩展BaseTest的测试包中创建新的Java类。 BaseTest将在每次测试之前启动Chrome,并在之后关闭它。 创建JUnit @Test批注并创建以下方法。 您已经在方法签名旁边运行了测试按钮。 您可以使用...
  • java spring项目 Spring为您提供了一个方便的工具,可确保您的Java项目具有一致的“ Spring”风格! 认识Spring Java Format插件集! 该工具已于今年5月发布,当前版本为0.0.6。 设置的插件包括: 应用包装和...
  • 很多初级java程序员都活遇到的问题,不管是培训完,还是自学的,到了写简历的时候,没啥写的,尤其是速成班的那种培训,三四个月的时间,只是把基础学了一遍,还不知道学没学会,项目实战就别提了,登录注册都没弄明白,培训...
  • tmdb-java, 使用retrofit2的themoviedb.org API v3周围的Java包装器 欢迎使用英镑请求的请求 ! tmdb-java围绕 TMDb v3的一个Java包装器,使用改造 2.用法 将以下依赖项添加到Gradle项目:compile '...
  • 服务器查询API的Java包装器 产品特点 包含几乎所有服务器查询功能! (请参阅《 ) 内置保持活动的方法 基于线程的事件系统 和实现均可用 可以设置为重新连接,并在出现连接问题后自动恢复执行 利用进行日志记录...
  • IDEA导入的web项目终于调试成功,最重要的地方有几点: 1.导入的项目中如果有要继承HttpServlet,则需要另外导入Servlet包,具体在Tomcat安装路径下的lib中servlet-api.jar、jsp-api.jar(jsp-api.jar好像可以不导,...
  • MMU-JAVA-项目-源码

    2021-02-20 08:16:28
    MMU-Java-Proj 在这个项目中,我们模拟MMU。 我已经缓存了页面算法,将其包装在一个jar文件中。 包括随机,LRU,最有效时间复杂度中的第二次机会。 然后,我建立了一个通用类,该类可以选择要选择的算法。 并将...
  • 前言:之前一直接触使用Gradle完成Android项目的自动化构建,所谓重新认识Gradle是因为最近看了《Gradle IN Action》一书,对gradle进行了一次全面深刻的重新的认识。所以决定以系列博客,来完成自己对Gradle学习之...
  • Mal4J-官方MyAnimeList API的Java包装器 • ••••• 概述 Mal4J是为Java 8+编写的MyAnimeList API的包装,并将许多复杂的操作简化为易于使用的库。 依赖关系托管在Maven Central上,可以在发行版中找到编译的...
  • 原文链接:Java包装类之实体类不要使用基本类型 今天来记录一下,在项目中因为基本类型,所产生的bug。U•ェ•*U 包装类:8种基本类型的包装类 应用场景:数据库建立实体映射多用包装类 这两句话是重点:就是建立...
  • 64位社区版下载地址:https://www.krenger.ch/blog/java-service-wrapper-3-5-14-for-windows-x64/一、制作一个包装项目的模板1.在硬盘上创建文件夹,并在其下创建子文件夹bin,conf,lib,logs2.解压刚下载的文件,并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,150
精华内容 460
关键字:

java包装项目

java 订阅