发表于: 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和端口。

这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。


明天计划的事情:

分享小课堂.

继续任务8


遇到的困难:

刚接触rmi, 概念不容易理解,先找demo跑起来再理解.


收获:

听了老大演讲,对写代码有更深层次的理解.


任务进度:任务8步骤1

任务开始时间:2017-11-23

预计demo时间:2017-11-27

是否有延期风险:暂无

禅道:http://task.ptteng.com/zentao/task-view-13485.html



返回列表 返回列表
评论

    分享到