发表于: 2017-11-23 23:40:20
1 605
今天完成的事情:
听老大讲优雅代码之道.
第一点, 三个小原则:
1. 代码行数长度不应该超过50行,否则不易复用与维护.
2.在controller里面最好不要有私有函数(私有方法)
3....
第二点,数据和代码分离:
数据实际上就可以认为我们在函数里面所处理的参数,在我们mvc里面基本可以认定为controller. ..代码实际上就是对数据的处理.. 一般我们是要将这两点分离开来.在函数(入参,出参),的参数配置在配置环境里面,,一般不进行显式构造.
第三点:mvc拯救世界.
这里实际上是对model , view, controller进行了剖析.刚刚也说model实际上就是数据,,而view则是对数据在前端页面的展现形式, controller是对model的处理,对实例属性进行具体的操作.,我们一般在写代码时,可以先写出对数据处理的方式,,,(utile,service) 然后由controller负责扮演中心控制台角色对各个方法的使用对数据进行处理.
第四点:分层.
这里讲的是controller.service,dao三层之间完全分离, service层主要是与业务逻辑等和业务有关联的逻辑代码,dao层是对数据库的数据处理,这里dao层可以是(mybatis,jdbctemplate等),service对dao层实现过程中可以忽视究竟是什么数据库
,controller对service,utile其调用的时候完全不用管里面是什么,我们只需知道调用时这个方法能实现什么功能即可.,,
dao层后面还可以有一个缓存层,,同理.
第五点:先简单在聚合:
将页面内各借口完全分离,否则在一个页面内几百行代码一个接口改动,其他接口可能都要改动.
如果页面上有两个接口或模块关联非常紧密,,我们可以将他们两个复合起来,视其为一个接口(体会意思即可,说法不严谨).
当有多台web 实现负载均衡对 多个service调用时,,,service之间尽量不要互相调用, 而使用web服务器对他们分开调用.
我们分离之后并不知道有多少service,,如果出现多个service之间互相调用的情况容易造成代码逻辑混乱,当代码出现问题时,我们也不好对问题定位..
若service之间必须调用,可以写一个接口对这两个service进行调用, 最好不要超过三层.
第六点:三种层级的抽象:
这三种层级分为 private,utile,和service.
private是私有方法,,自己类使用的方法.
utile则是工具,,可以写成所有项目都可以使用的那种工具类,
service是在当前项目中所拥有的实现.
service和utile的可同过有无业务逻辑来区分.
在写代码过程中,对代码进行无数次的重构可以通过这三点来进行定位, 对层级的构思,复用程度.
第七点: 项目延期:
在做方案设计时, PM提出功能之后,我们这时就要对功能的实现进行思考,在方案评审这三天,要将对功能的想法落实为具体文档,(难点或无法实现的提出来单独讨论),在这三天要解决所有实现问题.
写过代码之后我们可抽出部分时间对代码进行重构.提高以后做项目的效率.
重构完成进行性能测试.一定要确保 接口稳定性,
如果在项目进行过程中出现意外问题,要及时沟通,确定问题出在哪里,估算延期时间.
RMI它实际上是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
根据网上教程写个Demo.
首先定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常..
然后创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中
try {
//创建一个远程对象
IHello rhello = new HelloImpl();
//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
LocateRegistry.createRegistry(8888);
//把远程对象注册到RMI注册服务器上,并命名为RHello
//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)
Naming.bind("rmi://localhost:8888/RHello",rhello);
// Naming.bind("//localhost:8888/RHello",rhello);
System.out.println(">>>>>INFO:远程IHello对象绑定成功!");
} catch (RemoteException e) {
System.out.println("创建远程对象发生异常!");
e.printStackTrace();
} catch (AlreadyBoundException e) {
System.out.println("发生重复绑定对象异常!");
e.printStackTrace();
} catch (MalformedURLException e) {
System.out.println("发生URL畸形异常!");
e.printStackTrace();
远程的接口的实现..
* 因为UnicastRemoteObject的构造方法抛出了RemoteException异常,因此这里默认的构造方法必须写,必须声明抛出RemoteException异常
*
* @throws RemoteException
*/
public HelloImpl() throws RemoteException {
}
/**
* 简单的返回“Hello World!"字样
*
* @return 返回“Hello World!"字样
* @throws java.rmi.RemoteException
*/
public String helloWorld() throws RemoteException {
return "Hello World!";
}
/**
* 一个简单的业务方法,根据传入的人名返回相应的问候语
*
* @param someBodyName 人名
* @return 返回相应的问候语
* @throws java.rmi.RemoteException
*/
public String sayHelloToSomeBody(String someBodyName) throws RemoteException {
return "你好," + someBodyName + "!";
}
最后在客户端测试
try {
//在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法
IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");
System.out.println(rhello.helloWorld());
System.out.println(rhello.sayHelloToSomeBody("熔岩"));
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。
明天计划的事情:
分享小课堂.
继续任务8
遇到的困难:
刚接触rmi, 概念不容易理解,先找demo跑起来再理解.
收获:
听了老大演讲,对写代码有更深层次的理解.
任务进度:任务8步骤1
任务开始时间:2017-11-23
预计demo时间:2017-11-27
是否有延期风险:暂无
禅道:http://task.ptteng.com/zentao/task-view-13485.html
评论