设计静态模型时,需要根据SOLID原则进行设计,例如远程控制中命令较多,就抽像出一层,为每个命令单独写处理逻辑(当然多个命令也可以共用同一处理逻辑),既符合单一职责原则,又符合开闭原则,将影响降到最低,具体很大的灵活性。又如Master模块中的IDisplayPuppet接口,此接口是控制端显示傀儡屏幕的接口,供控制端主窗口MasterDesktop和*Listener调用。
/** * @author Cool-Coding * 2018/8/2 * 傀儡控制屏幕接口 */ public interface IDisplayPuppet { /** * 启动窗口显示傀儡桌面 */ void launch(); /** * 刷新桌面 * @param bytes */ void refresh(byte[] bytes); /** * * @return 傀儡名称 */ String getPuppetName(); }接口中这三个方法前两个方法launch和refresh,都是主窗口启动傀儡控制窗口和刷新屏幕必须的方法,第三个方法是由于发送命令时,需要知道傀儡名称,而实体之间是面向接口设计的,所以需要提供获取傀儡自身名称的方法。
日志、异常处理
日志和异常处理是相当重要的,好的日志记录方式和好的异常处理方式能够使项目结构更加清晰,怎么样才算好呢,人者见仁,智者见智。
我的心得是:
日志
记录程序关键步骤的上下文信息,例如记录请求或响应的数据以及附加的消息,记录此处建议使用trace/debug级别。
记录业务流程的日志,使用info/error级别,这一部分日志主要是应用日志,例如控制端发起控制,成功或失败消息。
日志最好通过统一的口径记录,便于结构清晰和日志管理
异常一定不要catch异常不处理,而且不要catch Throwable,因为Throwable包括了Error和Exception,Error一般都是不可恢复的错误,无法在程序中手工处理,不应该catch住。
一般下层在记录异常日志,并向上抛出后,上层不需要处理,直接继续向上抛出即可,如果为了让异常具体业务含义,便于异常问题查找,可以封装一些关键的业务异常。
异常最好集中处理,如springmvc:将异常集中在一个异常处理类中处理。
有两篇文章,我觉得不错,推荐给大家,我也从中参考了一些方法。
Java 日志管理最佳实践
Java异常处理的10个最佳实践
Centos6.5:傀儡端
Windows: 控制端、服务器
启动服务器、傀儡、控制端
复制傀儡名
将名称输入控制端
控制端打开一个远程屏幕
可以进行鼠标(单击,双击,右键,拖动等)或键盘(单键或组合键等)操作,并可调整屏幕清晰度。
讨论bug反馈及建议:https://github.com/Cool-Coding/remote-desktop-control/issues
GitHub源码https://github.com/Cool-Coding/remote-desktop-control
如果觉得还不错,Star支持一下吧。