【发布时间】:2016-05-03 11:22:16
【问题描述】:
我是一名学生,正在撰写关于 SSL/TLS 和 JSSE 的论文。在 oracle 提供的实现示例中(在此处找到:http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#AppA)我找到了实现示例:
public void doHandshake(SocketChannel socketChannel,
SSLEngine engine,
ByteBuffer myNetData,
ByteBuffer peerNetData) throws Exception {
// 2)
int appBufferSize = engine.getSession().getApplicationBufferSize();
// 3)
ByteBuffer myAppData = ByteBuffer.allocate(appBufferSize);
ByteBuffer peerAppData = ByteBuffer.allocate(appBufferSize);
// 4)
engine.beginHandshake();
SSLEngineResult.HandshakeStatus hs = engine.getHandshakeStatus();
// 5)
while (hs != SSLEngineResult.HandshakeStatus.FINISHED
&& hs != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) {
switch (hs) {
case NEED_UNWRAP:
// Receive handshaking data from peer
if (socketChannel.read(peerNetData) < 0) {
// The channel has reached end-of-stream
}
// Process incoming handshaking data
peerNetData.flip();
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
peerNetData.compact();
hs = res.getHandshakeStatus();
// Check status
switch (res.getStatus()) {
case OK:
// Handle OK status
break;
// Handle other status: BUFFER_UNDERFLOW, BUFFER_OVERFLOW, CLOSED
//...
}
break;
case NEED_WRAP:
// Empty the local network packet buffer.
myNetData.clear();
// Generate handshaking data
res = engine.wrap(myAppData, myNetData);
hs = res.getHandshakeStatus();
// Check status
switch (res.getStatus()) {
case OK:
myNetData.flip();
// Send the handshaking data to peer
while (myNetData.hasRemaining()) {
socketChannel.write(myNetData);
}
break;
// Handle other status: BUFFER_OVERFLOW, BUFFER_UNDERFLOW, CLOSED
//...
}
break;
case NEED_TASK:
// Handle blocking tasks
break;
// Handle other status: // FINISHED or NOT_HANDSHAKING
//...
}
}
// Processes after handshaking
// ...
}
现在,根据我对正确 OOP 架构的了解,方法不应超过 20 行,但我发现 Oracle 会犯这种基本的架构错误很奇怪。任何超过 20 行的内容都应分割成单独的方法,但也有例外。我想知道,这是那些例外之一吗?如果没有,将 switch/case 方法拆分为更小的方法的最佳方法是什么。
【问题讨论】:
-
您的机构可能正试图向您灌输良好的习惯,但世界上到处都是不符合您可能被教导的最佳实践的代码。即使在非常专业的代码中。不要感到惊讶。
-
没有“正确的 OOP 架构”,只有很多关于什么是正确的观点。
-
不应该超过20行? 20已经太多了。大约 4 或 6 行是合理的。
-
您可以在论文中编写任何您喜欢的代码。没有人会对其进行代码审查以符合公司标准。您的论文旨在扩展知识的界限,而不是五年内 24/7 全天候执行。
标签: java oop switch-statement