Java开发六扇门

一、创建工程结构&JavaBean

1.1 学会创建各种工程&模块

工程分类:

* jar&war

* 普通工程&Maven工程

* 工程&模块

* 传统工程&SpringBoot工程

1.2 准备各种JavaBean

三层架构:

* web层

* service层

* dao层

基本Beans准备:

* utils:常用工具类

* 实体类:Entity

* 特殊类:接口(通常dao层的Mapper, service层的服务接口等)

* 基础类:xxxBase类(可归为工具类)

各种Bean概念:

* DAO

* DTO

* POJO

* PO

* VO

* 一大堆,不必太在意

常见实体类:

* OOP入门时:什么Human类、Person类、Animal类、Duck类、Father类、Son类,总之海阔天空

* 经典案场:User类(软件系统中的管理子系统、用户子系统基本都有这么个类)

* 书城:Category类【类别】、Book类【书籍】、Customer类【顾客】

* CRM:Customer类【顾客】、LinkMan类【联系人】

* 商城:Items或Goods或Product类【商品】、ItemsDetial类【商品详情】、Orders类【订单】、OrdersDetail【订单详细】、User类【用户】、Role类【角色】

二、导入Jar包&依赖

1、Maven导依赖(GAV坐标)和传统导jar在本质上相同的,它的区别是软件工程管理和控制意义上的区别(比如工具使用、工程开发效率、开发和管理成本效益)。

使用Maven在pom文件中导入依赖坐标的开发方式,对于开发者来说主要就是三点:

* 一个是不用手动导jar包,在本地占用大量物理空间(jar包放到了库中,意味着共享和取用方法);

* 二个是jar包之间的依赖关系的处理,往往导一个,其它要用到的依赖包,就都导进来了,方便了不少;

* 三是项目构建,从软件工程上讲,项目构建不是一个动作,要做一系列的动作(包括清理、编译、报包、安装、发布等),这意味着几件事情:一是有序性、连续性和可靠性,各动作之间有逻辑关系,逻辑关系决定着顺序,多个动作既有顺序、又要一气呵成,而意味着需要保证连续性,中间还不能出差错,要有一定的保证,需要具有可靠性,可靠性当然需要包括流程在内的各种设计、规范甚至协议之间协调、一致性的保证等,这些东西其实是很复杂的,全靠人手工、原始的搞,很容易中间问题,如果最后把关不严,还会影响程序或系统的鲁棒性(健壮性)甚至安全性;二是速度和性能,它会涉及到最终开发的速度问题,程序运行的性能和效率问题,如果让开发人员深陷项目构建的细节当中去,速度和性能可能都会受到影响,比如产品的最终验收测试、发布上线等;三是项目与团队管理上的提升,有了新的基础,比如开发的一致性的提升、规范化的动作、DevOps等。总之,有了Maven,也就有了项目的一键构建,这让我们少操了很多心。

Maven有着出色的依赖管理能力,是一款优秀的项目构建工具,但这并不意味着,最后你的项目编译运行,pom上的那些GAV坐标不需要落地,所依赖的和最终产出的,不需要变成实实在在的jar或war包,这是不可能的,好吧!所以,我们又说,Maven导依赖(GAV坐标)和传统导jar在本质上相同的。库中的jar,以向上抽象的GAV坐标方式引入,以多项目共享的方式存在,并不意味着,最终发力的是GAV坐标,而不是jar包中的编译好的*.class文件,共享的本质是共同享有或使用,共同享有的前提,首先是要“有”,没有真正的“有”,共享拿什么来共,拿什么来享。所以,从这个意义上讲,Maven方式和传统导包方式,并没有什么不同,它们的本质是一样的。

2、所以,Maven不是我们的基本功,基本功是jar,无论是学校还是培训机构的教学,还是你自己自学,在学的过程中,强调的是基本功,是对jar的熟悉;实战开发中,强调“不要重复造轮子”,学习与应用是相反的,学习强调的是习,像鸟一样扑腾翅膀,是反复地扑腾,是基本功,是”就是要重复地造轮子,反复地造轮子“,因为不断地扇动翅膀,是基本功走向扎实的基本保证。对于学习来说,Maven是改进,不是功本功,基本功在原始的jar包上。我们要反复强调对jar包的了解和熟悉,包括jar包自身的功能、设计特征、使用方法,jar包之间在类库或框架中的地位或位置、设计目的、优劣性,jar包之间的依赖关系,甚至 jar包的版本迭代、历史渊源,开源与社区性质等。

在我们的项目开发中,要用 到大量的jar包或war,它们大多都是开源的,是来自于第三方(相对于sun或oracle公司来说)。这意味着,它是有社会属性的。什么意思?这意味着,我们要和各种jar包的来源方打交道,包括各种厂商、提供商、开源机构或个人,比如spring的公司,阿里,apache软件基金会等。

总而言之,从jar包的角度讲,就你是要熟悉各种需要用的类库和框架。

以Apache软件基金会来讲:

比如我们要使用到它的Commons类库,在apache官网(Welcome to The Apache Software Foundation!)的Apache项目清单或列表(APACHE PROJECT LIST)中, 我们就可以看到它,这意味着它是apache软件基金会的一个顶级项目。在该项目之下,还有一堆子项目,包括但不限于:

* commons-io
* commons-lang
* commons-collections
* commons-dbutils
* commons-dbcp
* commons-beanutils
* commons-codec
* commons-net
* commons-logging
* commons-uploadfile
* commons-math

等等。apche官方是这样介绍的,Apache Commons is an Apache project focused on all aspects of reusable Java components.   它说:Apache的Commons(项目或类库),是一个聚焦或主要关注反复使用的Java各种公共组件的这样一个项目。它用了一个all aspects of,表明了它的目的或野心(雄心霸气),即只要是可能反复使用到的java组件,它能关注的,就都关注了,能开发的,就都开发了。其实,Spring的官方何尝不是这个意思呢?

事实上,Commons只是Apache基金会众多项目中的一个,但仅从这一个,我们就可以看到学Java的人,除了要了Oracle公司(sun公司)打交道,还要和Apache打多少交道了。上面只是commons类库中我们常用到的10来个子类库,事实上,在Apache的Commons的主页上(Apache Commons – Apache Commons),列了40多个组件或子类库或子项目, Commons本身,就已经显得极为庞大和复杂了。而这一切,都只是冰山一角。

比如上边没有列举出的httpclient,只是Apache另一个项目HttpComponents类库中的子库或一部分,它的设计是属于HttpComponents的客户端(Client)功能的一部分。对于做分布式或微服务开发的Java程序员,经常要和它打交道。事实上,和Commons或HttpComponents这样的来自Aapche项目,我们还需要学习很多,比如:

* Tomcat 服务器或Web容器
* Maven 项目构建
* Freemarker
* Gradle 项目构建
* Groovy 脚本
* POI 报表处理
* ActiveMQ  消息队列
* RabbitMQ 消息队列
* Lucene&Solr 搜索引擎或检索
* Shiro 安全或认证授权
* Ant 依赖管理与项目构建
* Dubbo 分布式与远程调用(阿里捐献)
* ShardingShpere 搜索(当当、张亮捐献)
* ServiceComb 服务网格(华为捐献)
* NetBeans 集成开发环境
* 等等
如果你用Java做大数据开发,你一般还会和Apache以下项目打交道:

* Hadoop
* HBase
* Hive
* Kafka
* Flume
* Oozie
* Storm
* Spark
* Kylin (麒麟,由eBay、Kyligence)
* Thrift
* 等等

事实上,Apache像这样的项目,有一百多个,加上顶级项目下的子项目,那真是满天星斗,有点不计其数的赶脚。

技术是学不完的,类库和框架就更学不完。但我们对常用的、市面上主流的、基础性的类库和框架,我们还是要熟悉、要熟练,甚至要走到它的源代码上去看一看,看看它的设计思想和底层逻辑,看看它的优势和不愿说出口的弱点。

通常,框架是由类库组成的,大型的类库由是由子类库或其他组件组成的;而类库的上层一般是一堆接口或规范要求(即所谓API),或者是抽象类,然后才是一堆实现类,工具类,一堆真正意思上的API或API方法。

这么多的类库,让我们的鸭梨山大,所以,我们一般需要熟悉主要接口、主要或常用的实现类,以及通常提供系列静态方法的基本的工具类。要抓重点,重点就两个:一是学以致用,二是原理或设计思想。

走了Oracle或Sun的井口,我们发现天空很大,Apache,也只是天底下一座巍峨的大山,天下大了去了,除了有Apache,还有阿里,还有Spring全家桶和藏在背后的公司,它们一个个张着血盆大口,鲲鹏之大,一对翅膀就像要遮蔽整个天空的如海云阵...

3.那么好了,我们就来看看我们都学了些啥吧

面向对象编程,OOP,不,这太抽象了,太泛泛而谈了

啥是面向对象编程?OOP,三大特性,封装、继承、多态,或者四大特性,再加上抽象

(a)

不,这远远不够,因当是这样的,我们Java是高级编程语言,是从低级编程语言演化而来,面向对象编程,是Java是所谓高级语言的最突出特征,过去的函数,变成了对象方法,对象,不是你的女朋友,也不是她的朋友,而是像一个虚拟的但独立的机器人,方法Method的本质,就是过去的Function函数,函数Function的另一个意思,就是功能。功能就是服务,对象就像机器人,机器人就是通过它的方法,这些方法,就像机器人的手或脚,可以做出各种动作,发挥各种作用,来为人类服务的,服务的本质,就是提供信息服务,信息服务的本质,就是人类对数据的特殊嗜好或各种各样的需求,而对象的构成,就是由两样东西构成的,叫做对象的成员,成员有两种,一种叫成员方法,也就是前面说的,它的本质,就是过去面向过程编程时的函数,而另一个叫对象属性,因为需要封装到对象中,是属于对象的,不是独立存在的,它的本质,其实就是两个,一个叫作变量,一个叫作数据,变量就像容器(比如桶或者盆或者格子、箱子、篮子之类),是用来装东西的,这个东西,就是数据,而成员方法,就是用来生产、加工数据、输入输出变量和数据的。

        我们归纳一下,对象(就像机器人或者服务生)由两部分组成:

              * 成员属性 =====>本质:变量 & 数据                  #变量就像桶,数据就像水

              * 成员方法 =====>本质:函数 &  小功能体           #函数就像手脚,功能就像做动作------做事,比如去打水/输入水、生产水/加工水/运送水(比如生产可乐)、卖水/输出水(比如递咖啡给你)等。

      你能想像在一个咖啡店里,一个女服务生,给你取水、加热水、磨咖啡、冲咖啡、最后端给一你一杯热腾腾、香喷喷的上等咖啡的过程吗?是的,水、咖啡这些东西,就是成员变量,取(水)、磨(咖啡)、冲(咖啡)、端(咖啡)、递(咖啡)这些就是成员方法或功能函数,这些都是由那个女服务生做出来的,那个女服务生就是一个对象。但咖啡店里,女服务生不是一个,是一类,所以女服务生是一个类,这个相对抽象的类的下面,就是一个个的对象,一个个的女服务生。然后,你就可以喝到好喝的咖啡了。当然,其他人也可以喝,你只需要打声招呼、递上mongy、告诉她你的需求就行,这叫方法调用,和输入参数,而当你喝上咖啡时,它就叫返回值。

(b)

事实上,我上面只是讲了OOP的一个方面的事情。另一个方面,你应当这样来理解,怎样来理解呢?那就是从架构体系上来理解?

大体是这样的:

其一:

* 对象:(相信,通过前面的咖啡店女服务员的例子,你应当理解了)
* 类:类是对对象的共性的一种抽象;在内存中,本质是一种特殊的对象,叫类对象
* 枚举:即枚举类,是一种特殊的类,是特定类的一种语法糖形式,这个糖的甜份和糖度,当然就是方便,而且能提高代码的鲁棒性,甚至安全性啦
* 接口:可以简单地理解成,是一种特殊的类,而且是一种特殊的抽象类
* 注解:是一种特殊的接口;是特定接口类型的一种语法糖形式,这个糖的甜份和糖度,就是有了这个接口,它会给你提供相应的一种的实现,形成功能代码,让你少做很多事情

其二:

接口&实现类:

        * 接口就是规范,它有两个主要目的,一是规范,二是解耦;

                # 所谓规范,有两层意思,一是约束,有强制性的意思在里边,二是一致性与协作;
                # 所谓解耦,也有两层意思,一是分工;二是可扩展与增强;

       * 实现类:也有两层意思,一嘛,当然就是对接口或规范要求的实现;二呢,就是基于分工和特定要求之下的,各种不同的实现,体现了从抽象到具体的过程,更体现了扩展与增强的无限可能。打个比方,如果你能理解JDBC,你就能理解我说的意思。

       换句话说,从接口到实现,既具有哲学意义,更具有社会学、(软件)工程学和经济学上的意义。因为,抽象和具体,是哲学范畴;但基于分工,而变得专业,变得更加科学,因为更加科学,而变得更加具有生产力和经济性,是一个显然易见的过程和必然逻辑,具体地讲,就是可以节约成本、产生更好的产品,最终走向物美而价廉,满足市场和人类的特定需求和更高需求,让美好的想像变得可能。

       * 从接口到实现类,从抽象定义到具体产品,这个最终的产品,会放到市场上去优胜劣汰,而优胜劣汰是大自然的法则,是上帝的法则,是必然的法则,是过程可能有点痛苦但最终必然好的法则,是不可抗拒的法则,是伟大的法则,你明白了吗?产品无论好与坏,最终,站在上帝的角度,时间的角度,更高的、上层的角度来看,都是好的,因为,沧浪之水清兮,可以濯我缨 沧浪之水浊兮,可以濯我足;失败是成功之母,成功是完美他爸。完美,就是上帝的代明词,顾客就上帝,他就是想要最好的,好上加好的,不断进化。人,其是上帝;上帝,是人在人的想像中所浮现的人的影子,那是人的灵魂的一面。一方面,上帝并不存在,另一方面,上帝就在那里。你懂了吗?

       * 接口与实现类,就像一种架构方法,这种架构方法,为我们提供了无限可能。它是科学的,也是专业的。天高而地厚,强制性与约束性,具有闭合性和闭区间的特征,而分工与扩展,而具有开放性和开区间的特征。

类库:其实就是由一堆具有功能需求、设计目的、使用方向、内在逻辑关联性、场景耦合性诸方面相近或相关的——类或接口——组成的功能组件或部件

框架:其实就是更大一点的类库,由一堆类库组成,提供相对丰富的功能、服务于特定设计目的的多类库或类库矩阵,是一个复合体,从市场或产品角度上讲,它往往具有半成品的性质,为开发成熟的市场产品或软件系统提供了有力的基础

三、配置:各种配置

1、学习各种配置,是学习Java的另一个基本功

四、注解:添加注解

五、API:调用API方法,实现功能

六、测试:JUnit + Postman + JMeter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值