由fourinone初步学习想到的

最近希望做分布式计算方面的支持,当然,省先要了解一下相关的内容。

以前就看到过taobao的fourinone框架的说明,感觉非常好,值得研究,于是就下载了fourinone-3.04.25的开源版本,地址https://code.google.com/p/fourinone/

不看不知道,一看,吓了一跳,难不成这个是拿出来之前处理过,专门让人看不懂的?

不解一、所有的类都在一个包名下,不同层次的代码都混在一起。很明显的,底层是分布式计算的基础部分,这个与具体实现的功能无关。

实现集群配置、集群文件系统、MQ、分布式缓冲之类的功能是基于核心功能进行扩展出来的新功能,最好的办法当然是分成多个工程;不能分成多个工程,好呆分成不同的包名,全部混在一个包之中,只有两种可能,一种是层次分解不清晰,另外一种是人为处理,不想让人看明白。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

ArrayAdapter.java

ArrayInt.java

AsyncExector.java

AuthPolicy.java

BeanContext.java

BeanService.java

Cache.java

CacheFacade.java

CacheLocal.java

CacheProxy.java

ClosetoOverException.java

ConfigContext.java

Contractor.java

ContractorParallel.java

ContractorService.java

CtorLocal.java

Delegate.java

DelegateConsole.java

DelegateHandle.java

DelegatePolicy.java

DelegateProcessor.java

DESBean.java

FileAdapter.java

FileBatch.java

FileException.java

FileResult.java

FttpAdapter.java

FttpContractor.java

FttpException.java

FttpLocal.java

FttpMigrantWorker.java

FttpWorker.java

FttpWorkerProxy.java

FttpWorkerService.java

HbDaemo.java

LastestEvent.java

LastestListener.java

LeaderException.java

LogUtil.java

MementoService.java

MigrantWorker.java

MulBean.java

ObjectBean.java

ObjectBeanList.java

ObjectBeanProxy.java

ObjectBytes.java

ObjectVersion.java

ObjValue.java

ParallelService.java

Park.java

ParkActive.java

ParkGroup.java

ParkInetServer.java

ParkLeader.java

ParkLocal.java

ParkManager.java

ParkMeta.java

ParkObjValue.java

ParkPatternBean.java

ParkPatternExector.java

ParkPermission.java

ParkProxy.java

ParkService.java

ParkStatg.java

PoolExector.java

RecallException.java

ResourceBean.java

Result.java

ServiceContext.java

ServiceException.java

StartResult.java

SuperContractor.java

WareHouse.java

Worker.java

WorkerLocal.java

WorkerParallel.java

WorkerParkProxy.java

WorkerProxy.java

WorkerService.java

WorkerServiceProxy.java

Workman.java

XmlCallback.java

XmlObjectCallback.java

XmlUtil.java

不解二、鲜见注释

从头到尾看不到多少注释,对于set、get实现,不写啥注释都可以理解的。但是连接口与重要的类也没有注释,对于阅读者来说就非常困难了。

不解三、命名给人带来的困扰

下面是一个接口

?


1

2

3

4

5

6

7

public interface Worker extends ParkActive

{

    public void setMigrantWorker(MigrantWorker mw) throws RemoteException;

    public WareHouse doTask(WareHouse inhouse) throws RemoteException;

    public void stopTask() throws RemoteException,InterruptedException;

    public boolean receiveMaterials(WareHouse inhouse) throws RemoteException;

}

下面是另外一个接口

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public interface FttpWorker extends ParkActive{

    public byte[] read(String f, long b, long t) throws RemoteException,FttpException;

    public byte[] readLocked(String f, long b, long t) throws RemoteException,FttpException;

    public int[] readInt(String f, long b, long t) throws RemoteException,FttpException;

    public int[] readIntLocked(String f, long b, long t) throws RemoteException,FttpException;

    public int write(String f, long b, long t, byte[] bs) throws RemoteException,FttpException;

    public int writeLocked(String f, long b, long t, byte[] bs) throws RemoteException,FttpException;

    public int writeInt(String f, long b, long t, int[] its) throws RemoteException,FttpException;

    public int writeIntLocked(String f, long b, long t, int[] its) throws RemoteException,FttpException;

    public FileResult getFileMeta(String f) throws RemoteException,FttpException;

    public FileResult[] getChildFileMeta(String f) throws RemoteException,FttpException;

    public String[] listRoots() throws RemoteException,FttpException;

    public File createFile(String f, boolean isFile) throws RemoteException,FttpException;

    public boolean deleteFile(String f) throws RemoteException,FttpException;

    public boolean copyFile(String f, long e, URI t) throws RemoteException,FttpException;

    public boolean renameFile(String f, String n) throws RemoteException,FttpException;

}

开始我根据命名理解,以为FttpWorker是继承 Worker的,显然我错了,这两个根本就没有关系,它们都继承自ParkActive。偶的理解,如果两个是两个东东,要么就给Worker前面加上一个另外的形容词可能更好。

好吧,接下来看看ParkActive长什么样:

?


1

2

3

4

package com.fourinone;

import java.rmi.Remote;

interface ParkActive extends ParkStatg,Remote{

}

再看ParkStatg ,实际上是继承了序列化接口

?


1

2

3

4

5

package com.fourinone;

import java.io.Serializable;

interface ParkStatg extends Serializable{

    static final long serialVersionUID = 2983113349866492266L;

}

至次才明白,所谓的工人,就是带有远程访问接口和序列号接口的任意的类。它上面没有自己的任何接口方法。

但是这一圈转下来,嗯嗯,头有点晕。

不解四,散落的main

在程序中许多类中都有一个main方法在那里,虽然不一定能造成多坏、多大的影响,但是明显,这不是一个好的做法。

问题,哪位能给解释一下这些变量代表啥意思??

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

public class ParkMeta

{

    private static String YSJ,YBB,YCJZ,YCIP,YCSJ,YQX,YSX,YGXZ,YGIP,YGSJ,SXXT;

    static{

        MulBean mb = ConfigContext.getMulBean();

        YSJ = mb.getString("YSJ");

        YBB = mb.getString("YBB");

        YCJZ = mb.getString("YCJZ");

        YCIP = mb.getString("YCIP");

        YCSJ = mb.getString("YCSJ");

        YQX = mb.getString("YQX");

        YSX = mb.getString("YSX");

        YGXZ = mb.getString("YGXZ");

        YGIP = mb.getString("YGIP");

        YGSJ = mb.getString("YGSJ");

        SXXT = mb.getString("SXXT");

    }

}

小结

到目前为止,还没有对fourinone有深入的了解,但是很明显的,令我有点失望。一开始,我觉得总共80多个类,去掉扩展的功能,核心的部分应该很少,大概也就30个左右差不多了,但是实际上看下来,还是感觉到比较困难。当然,这也与自己的水平与能力不足有相当的关系。

反过来说,开源,绝对不是把自己的代码放在别人能看得到的地方就叫开源了。如果别人看不懂,或者很难看懂,会直接影响到开源的目的与效果。
国人开源的意识及道路还很漫长,共勉!

时间: 2024-10-03 01:35:57

由fourinone初步学习想到的的相关文章

菜鸟初步学习android,遇到这个问题,求解答?

问题描述 菜鸟初步学习android,遇到这个问题,求解答? android.database.sqlite.SQLiteException: near ""value"": syntax error (code 1): while compiling: insert into person(_idnamephone) value(???) 解决方案 values你少了s 解决方案二: 基本语法错误 values 解决方案三: values 很明显的错误. 解决方案

json2.js的初步学习与了解_json

json2.js的初步学习与了解 1.)该js的下载地址是:http://www.json.org/json2.js 2.)在页面中引用该脚本:<script type="text/javascript" src="js/json2.js"></script> 3.)示例演示一: 复制代码 代码如下: //直接声明json数据结构 var myJSONObject = {"bindings": [ {"ircEv

Android贝塞尔曲线初步学习第二课 仿QQ未读消息气泡拖拽黏连效果

上一节初步了解了Android端的贝塞尔曲线,这一节就举个栗子练习一下,仿QQ未读消息气泡,是最经典的练习贝塞尔曲线的东东,效果如下 附上github源码地址:https://github.com/MonkeyMushroom/DragBubbleView 欢迎star~ 大体思路就是画两个圆,一个黏连小球固定在一个点上,一个气泡小球跟随手指的滑动改变坐标.随着两个圆间距越来越大,黏连小球半径越来越小.当间距小于一定值,松开手指气泡小球会恢复原来位置:当间距超过一定值之后,黏连小球消失,气泡小球

求:解决不明白编程中的代码含义问题和初步学习技巧

问题描述 大家好,我现在正开始学习JAVA,以前从来没有学习过电脑知识,只会玩游戏,现在发现编程里面的思考空间很大,我很喜欢,所以就选择了朋友们推荐的JAVA,请大家给我这样的情况简单的说一下学习方法,主要解决下不懂代码含义的问题,我用词霸也有很多翻译不了,大家给条明路啊,搞不好进今天你偶尔帮助过的小菜鸟,明日就是和你一路同行的同志,谢谢 解决方案 我的建议,先选择一个更容易并且更基础的语言去学,比如c,通过c的基本语法,你会懂得编程语言的基础.然后再去学java,他也属于c系列,所以基本语法的

CloudFoundry中EventMachine的初步学习

问题描述 CF中EventMachine的使用非常常见,但是对Ruby并发机制不太了解的童鞋可能对这一部分始终不大清楚.所以我们有必要对EM在CF中常见的使用方法进行一个说明,希望能够起到抛砖引玉的作用.不多说了,请移步: 解决方案 解决方案二:看看学习解决方案三:不错,值得看看.解决方案四:不错不错,味道好极了解决方案五:该回复于2012-10-21 12:59:03被版主删除解决方案六:跟楼主学习了解决方案七:可以!值得学习!解决方案八:好东西,学习了,谢谢解决方案九:好东西谢谢分享解决方案

CloudFoundry中NATS的初步学习

问题描述 NATS作为CloudFoundry的神经中枢,其作用不言而喻.在网络编程方面,NATS是使用EventMachine简化这部分工作的经典案例,同时EM也为NATS带来了高并发场景下优秀的处理能力.这里我们在对NATS源码进行学习的同时,对NATS的Sublist匹配结构做了一定的分析,并对EM在NATS中的使用方式作出了简短的说明.猛击:

初步学习Swing

一直就想学习java的桌面编程,可惜直到现在因为是在unix上的原因并不需要java程序有界面,不过自己还是想好好学习学习.所以从今天开始总结经验: 1 import java.awt.*;2 import java.awt.event.*;3 import javax.swing.*;4 5 public class ToolbarFrame2 extends Frame {6 7   // 使用Swing组件8   JButton cutButton, copyButton, pasteBu

Javascript正则表达式的初步学习

1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>正则表达式的学习</title> 5 </head> 6 <body> 7 8 <script language="javascript"> 9 //创建正则表达式,RegExp是一个对象,test是一个方法 10 //第一个参数是正则表达式的文本内容 11 //第二个

Android贝塞尔曲线初步学习第一课

贝塞尔曲线有一阶.二阶.三阶.N阶 一阶就是一条直线,有起点终点,没有控制点,对应方法就是 canvas.drawLine(float startX, float startY, float stopX, float stopY, @NonNull Paint paint) ; 二阶为曲线,有起点终点,一个控制点,对应方法就是 path.quadTo(float x1, float y1, float x2, float y2); 其中x1.y1为控制点坐标, x2.y2为终点坐标,效果如下: