由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个左右差不多了,但是实际上看下来,还是感觉到比较困难。当然,这也与自己的水平与能力不足有相当的关系。

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

相关文章
|
数据采集 Java 数据库
大学里面抢课到底可行吗?我来给你彻底说明白
大学里面抢课到底可行吗?我来给你彻底说明白
|
5月前
|
JSON Java 测试技术
一篇文章讲明白JGit学习
一篇文章讲明白JGit学习
149 0
|
6月前
|
程序员 开发工具 Python
最全学Python有什么用?看完这些你肯定明白_学pysion的作用,2024年最新字节跳动面试严格吗
最全学Python有什么用?看完这些你肯定明白_学pysion的作用,2024年最新字节跳动面试严格吗
最全学Python有什么用?看完这些你肯定明白_学pysion的作用,2024年最新字节跳动面试严格吗
编程要搞明白的东西(一)
编程要搞明白的东西(一)
85 0
|
11月前
|
C语言
近期一系列个人做题反复记不住以及思路不清晰问题的总结
近期一系列个人做题反复记不住以及思路不清晰问题的总结
50 0
|
Java
编程要搞明白的东西(二)
编程要搞明白的东西(二)
88 0
|
安全 编译器 程序员
学过 C++ 的你,不得不知的这 10 条细节!
我在阅读 《Effective C++ (第三版本)》 书时做了不少笔记,从中收获了非常多,也明白为什么会书中前言的第一句话会说: 对于书中的「条款」这一词,我更喜欢以「细节」替换,毕竟年轻的我们在打 LOL 或 王者的时,总会说注意细节!细节!细节~ —— 细节也算伴随我们的青春的字眼 针对书中的前两个章节,我筛选了 10 个 细节(条款)作为了本文的内容,这些细节也相对基础且重要。 针对这 10 细节我都用较简洁的例子来加以阐述.
学过 C++ 的你,不得不知的这 10 条细节!
|
存储 人工智能 算法
练了那么多,为啥还不会编程
Python 技术已经一岁多了,持续不断地推出新知识、新技术、新技巧,不过很多童鞋存在一个疑问:学这么多编程知识、技术、技巧到底有什么用?对呀,技术日新月异,层出不穷,解决方案如雨后春笋,对于我们普通人来说,编程到底有什么用,今天我来谈谈这个问题,期望对你有所启发。
173 0
练了那么多,为啥还不会编程
|
大数据
|
安全 Java 调度