蓝色网站欣赏,单页网站订单系统怎么改邮箱,seo公司排名,购物网站er图zk框架我曾多次被要求提出一些有关ZK的意见。 因此#xff0c;根据我4年作为ZK用户的经验#xff0c;有一些想法#xff1a; 总体开发人员经验#xff0c;社区和文档 “就是这样” ZK提供的大多数东西都能很好地工作#xff0c;并且如果您以前开发过任何桌面Java应用程序… zk框架 我曾多次被要求提出一些有关ZK的意见。 因此根据我4年作为ZK用户的经验有一些想法 总体开发人员经验社区和文档 “就是这样” ZK提供的大多数东西都能很好地工作并且如果您以前开发过任何桌面Java应用程序则使用该功能通常非常直观。 在2007年我对RIA技术进行了比较其中包括Echo2ZKGWTOpenLaszlo和Flex。 Echo2和OpenLaszlo感觉不完整且有故障并且似乎在任何地方都没有适当的Maven工件。 GWT似乎更多是一项技术实验而不是一个很好的平台。 之所以放弃Flex是因为缺少了一些重要的Maven工件并且Flash对应用程序来说是不切实际的要求。 另一方面ZK感觉到了最“自然”的感觉因此我很快就可以提高工作效率。 在ZK的4年漫长旅程中我获得了很多“惊喜”时刻当我越来越了解ZK并提高了我对框架的架构理解时。 如今我对ZK中的哪些功能什么无效什么有问题什么没有有很好的了解。 但是在获得了所有这些好与坏的见解之后我认为ZK是开箱即用的非常令人印象深刻的产品。 当然这样做的缺点是该框架对新手隐藏了很多东西以便易于使用并且其中有些东西以后会给您带来困扰 尤其是在您的应用程序具有大量用户的情况下。 非常非常非常灵活 ZK非常灵活具有很多集成。 您是否要使用声明性标记来构建组件树 使用ZUL文件。 您要坚持纯Java吗 使用richlets。 您还可以集成JSPJSFSpring并在zscript中使用多种语言。 核心框架也非常灵活如果遇到问题您可以覆盖很多东西。 不利的一面是有许多正确的做事方法甚至还有更多的搞砸方法。 灵活性本身并不是负面因素但是我认为ZK文档并不能指导用户充分了解ZK的最佳实践。 最佳实践是什么 许多教程都使用zscript但是由于性能原因文档也建议避免使用zscript。 论坛非常活跃 我认为ZK论坛是了解ZK的最佳场所之一。 它非常活跃并且线程从初学者到深层次的技术内容都各不相同。 我几乎每天都会自己阅读论坛有时还会帮助人们解决问题。 有一件事情让我有些烦恼论坛中的英语通常不是很好并且人们经常问得太广泛了。 我知道批评非英语母语人士的作品是不公平的尤其是当我自己不是母语人士的时候。 无论如何我认为存在这样的障碍。 例如从ZK论坛和Spring Web论坛中抽取5个随机线程。 Spring论坛中的主题通常更为详细和集中而不是“ 我是新手我需要创建具有大量功能的应用程序x请告诉我如何做所有事情 ”您在ZK论坛中看到的主题和人们显然会花一些时间来提出良好而详细的问题。 您会看到您必须在ZK论坛上花更多的时间才能理解主题。 这不是任何人的错也不是坏事这仅仅是一个观察。 对我来说不幸的是这意味着我在ZK社区中度过的有限时光只是用来理解人们在说什么。 通常仅当我立即知道答案或线程涉及一些深层次的技术知识时才回答线程。 有很多文件 过去ZK文档分散过时并且一些更重要的内容完全丢失。 近年来文档已经有了很大的改进并且现在有针对ZK配置 客户端ZK和样式的单独综合参考。 我认为今天的文档非常好通过阅读文档可以轻松回答大多数基本问题。 正如我上面提到的ZK倾向于“公正地工作”。 总体技术质量令人印象深刻可与大多数Java Web框架相提并论但我相信ZK的某些部分不太令人印象深刻。 卡在Java 1.4上 ZK是使用Java 1.4构建的这极大地限制了其API的灵活性和内部代码质量 对ZK内部代码的负面影响 ThreadLocals不能通过remove移除 调用setnull可以防止泄漏所包含的对象但是不能正确地移除ThreadLocal 许多简单的java.util.concurrent数据结构或对象将在其中运行的自定义同步代码ConcurrentHashMapSemaphoreAtomic *等 在StringBuilder适用的地方使用StringBuffer 没有注解 我个人不喜欢繁重的注释框架因为注释是一种语言外的功能通常您最终会得到注释并且注释中包含基于字符串的没有类型安全性的值。 但是我知道有些人会为基于他们的API而高兴。 没有枚举 ZK API中有很多地方适当的枚举比目前使用的hacks要好得多。 最严重的违规者是Messagebox。 看看这个签名 public static int show(String message,String title,int buttons,java.lang.String icon,int focus) the ..不可思议的整数让我想起了SWT这是一个很棒的API糟糕的库。 让我们想象一下带有枚举和泛型的替代版本 public static Messagebox.Button show(String message,String title,SetMessagebox.Button buttons,Messagebox.Icon icon,Messagebox.Button focus) 更好更类型安全。 没有更多的按位或魔术。 如果使用Java 1.5我可以在10分钟内将其编码到ZK中。 没有泛型 这是卡在Java 1.4上最糟糕的部分。 我只列出一些我想看到泛型的地方 API签名中的集合值 org.zkoss.zk.ui.util.Initiator中的示例 void doInit(Page page, Map args); 与 void doInit(Page page, MapString, Object args); org.zkoss.zk.ui.Component中的示例 List getChildren(); 与 ListComponent getChildren(); 类集合类 ListModel中的示例 public interface ListModel {...Object getElementAt(int index);...
} 与 public interface ListModelT {...T getElementAt(int index);...
} 所有ListModel *类也应该是通用的大多数扩展java.util.Collection。 org.zkoss.zk.ui.event.EventListener public interface EventListener {public void onEvent(Event event);
} 与 public interface EventListenerT extends Event {public void onEvent(T event);
} org.zkoss.zk.ui.util.GenericAutowireComposer public class GenericAutowireComposer {protected Component self;...
} 与 public class GenericAutowireComposerT extends Component {protected T self;...
} 所有* Renderer类 org.zkoss.zul.RowRenderer中的示例 public interface RowRenderer {void render(Row row, Object data);
} 与 public interface RowRendererT {void render(Row row, T data);
} 令人印象深刻的服务器推送实现 默认的PollingServerPush具有延迟如果有许多活动用户它将绝对杀死您的应用程序服务器。 CometServerPush更好但是它不使用非阻塞IO并且会阻塞servlet容器中的servlet线程。 让我们对此进行透视 Tomcat 7.0的默认配置将连接器的最大线程数设置为200。这意味着如果您有200个启用了彗星的桌面则Tomcat将停止响应其他请求因为彗星正在使用所有线程。 如果该实现使用的是Servlet 3.0或特定于容器的异步API则即使只有一个线程您也可以运行Tomcat。 这当然会很慢但不会停止工作 同样CometServerPush需要ZK EE因此普通用户会陷入PollingServerPush的困境。 考虑到服务器推送的营销方式这是一个很大的限制。 但是这并不奇怪适当的非阻塞彗星很难实现并且在从浏览器到Servlet代码的所有过程中都需要非阻塞组件。 脚本 我不喜欢zscript。 很多年前它可能是一个不错的功能但我相信今天完全不应该使用它。 为什么为什么有人要用混合了ZUL模板的未经类型检查的zscript替换类型安全的已编译Java代码 “我可以使用Python / Ruby /…”。 对于某些人来说这可能是一个正确的观点但是您最终将在ZUL模板中处理无法维护的代码 “保存文件时更改可见”。 是的但是我永远不会为此功能付出太多。 此外使用JRebel可以获得类似的效果。 因此如果在zscript中放入“ Java代码” BeanShell代码则可能需要重新考虑。 依靠反思 许多有用的功能都依赖于反射这限制了编译器可以为您检查的内容。 在许多Java库/框架中这是非常典型的事情因此它并不是ZK特定的事情。 作为一个Scala用户我可以看到Java的局限性如何将大多数框架引导到反射/注释的路径。 反射总是不能避免的但是我认为如果大多数有用的功能都依赖反射这是一个不好的信号。 这是ZK中使用反射的一些功能 任何不使用component.addEventListener的事件侦听。 这包括扩展GenericEventListener的所有类例如除MultiComposer之外所有ZK提供的Composer类 数据绑定 ZUL模板中的EL表达式 参考 关于ZK Web框架的 想法 总体经验和关于ZK Web框架的想法 Jawsy Solutions技术博客上的 JCG合作伙伴 Joonas Javanainen的技术资料 相关文章 SmartGWT入门提供出色的GWT界面 高级SmartGWT教程第1部分 使用Spring Security保护GWT应用程序的安全 GWT EJB3 Maven JBoss 5.1集成教程 Spring MVC3 Hibernate CRUD示例应用程序 Spring MVC开发–快速教程 翻译自: https://www.javacodegeeks.com/2012/01/zk-web-framework-thoughts.htmlzk框架