UI开发的终极解决方案

简介:

呵呵,有点标题党的意思,但是如果你正在寻找UI解决方案,你一定不会白来的。

虽然没有直接开发前台界面,但是好呆也看了这么些年,碰到许多关于UI的问题:

  1. UI中JS的引入与顺序,JS合并的问题
  2. UI中css的引入与顺序,CSS合并的问题
  3. UI中碰到性能问题时的影响范围,比如:一个树出现问题,要改动许多用到树的地方
  4. 代码重复的问题,同样的内容在许多地方都有,如果要改动就要改动许多个地方
  5. 整体布局调整困难的问题
  6. 开发效率的问题
  7. 执行效率的问题,前台响应要求速度更快
  8. 集群的问题
  9. 国际化的问题
  10. ...

这些问题直接带来开发得是否够快,系统是否够健壮,系统是否易扩展,是否易维护等等。

为此,在Tiny框架中,我们设计了整套的UI开发方案,与具体的技术实现无关,可以兼容各种现有或未来的JS,CSS框架。同时,对于上述的问题,也都有良好的思考及解决方案,可谓是界面开发的终极解决方案。

那么,Tiny框架的UI解决方案是怎样的呢?

一、规范化,如果没有一个规范,那么所有的期许都无法落地。

Tiny中规范中认为所有共用的内容都是一个UI组件包。UI组件包,由一个Jar工程组成,UI组件名最后以Jar名为单位进行发布。UI组件包中包含了其所需的css/jss/gif/htm等等各种资源。同时有一个UI组件包描述文件,对UI组件包的结构、内容、以及对其它UI组件包的依赖关系。

比如:我们要复用JQuery,实际上非常简单,在Maven工程结构中,在resources目录中,放置所有的JQuery资源进来,然后编写一个ui组件包描述文件。UI组件包就算开发完毕了。

再看看UI组件包描述文件

?
1
2
3
4
5
6
< ui-components >
     < ui-component name = "Jquery" order = "99" >
         < js-resource >/jquery/js/jquery-1.9.1.min.js</ js-resource >
         < js-debug-resource >/jquery/js/jquery-1.9.1.js</ js-debug-resource >
     </ ui-component >
</ ui-components >
UI组件名描述信息,包含UI组件名名称,这里是JQuery,引入顺序,这里指定是99,当然,在大多数情况下,你都不需要指定它。这里指定了调试和非调试模式下引入的JS。这样,在实际运行时,可以根据运行模式来统一进行引入,而这个过程不再需要程序员干预。

OK,mvn install之后,第一个UI组件包就开发好了,非常简单吧?

二、引擎支持

引擎要做内容就非常多了,这些js/css/img资源都是放在Jar包中的,在工程运行过程中,需要访问到这些文件,引擎提供了访问Jar包中文件的能力,提供了css/js文件合并,提供根据运行模式引入调试或非调试JS或CSS的能力,提供文件缓冲以提速访问,提供压缩以缩小网络传输量,等等等等。当然,这些都相当有难度,但这正是框架要解决的问题,对于程序员来说,与平时所做的内容唯一不同就是需要配置一个UI描述文件。用如此小的付出换来如此多的便捷,投入产出比还是相当高的。

三、模板化支持

我们都知道不管是html,xml,wml等等,实际上都是文本内容,都是一些标记语言。因此,都可以通过一些模板语言来进行生成,我们常说的asp,aspx,jsp,php等等,实际上都可以认为是模板语言。

Tiny框架因为提供了良好的模块化组织方式,展现层的内容也是可以放在jar包中的,因此,不再推荐使用jsp作为展现层(在某些容器如:tomcat,jetty,也是可以放入的,但是在Weblogic,Websphere等容器下,由于其没有遵循接口编程规范,而是使用了类型强转,所以无法进行处理)。另外,由于jsp自身的特殊性,实际上它最后是以Servlet形式存在,所以可控性稍差,虽然通过处理可以对其进行控制,但是投入产出比不高。所以,Tiny框架并不排斥,使用jsp,但是只能放在war中使用。带来的问题就是展现层无法模块化。(关于模板化的相关问题不在此说明,参见相关博文)。

因此Tiny推荐采用模板语言,如:Velocity,FreeMaker等作为展现层。Tiny内部实现复用了Velocity,但是实际上并没有限制,你完全可以用其它模板语言做同样的事情。

Tiny的模板体系组织方式如下:

  • 支持多层文件结构
  • 布局文件统一用.layout扩展名结尾
  • 页面文件统一用.page扩展名结构
  • 只有.page文件可以被外部访问,访问方式有两种.page或.pagelet

Tiny的模板渲染方式为:

如果访问aa.pagelet,则会读取aa.page中的文件内容,并用velocity引擎进行渲染后输出

如果访问aa.page,则会读取aa.page中的文件内容,并用velocity引擎进行渲染,但是此时会做布局渲染

比如:aa.page所中的路径是/a/b/c/aa.page,布局的渲染过程如下:

查找/a/b/c/aa.layout是否存在?如果存在,则渲染,否则查找/a/b/c/default.layout,如果存在,则渲染。

查找/a/b/aa.layout是否存在?如果存在,则渲染,否则查找/a/b/default.layout,如果存在,则渲染。

查找/a/aa.layout是否存在?如果存在,则渲染,否则查找/a/default.layout,如果存在,则渲染。

查找/aa.layout是否存在?如果存在,则渲染,否则查找/default.layout,如果存在,则渲染。

通过上面的渲染机制,程序员有可能只写了非常少的内容,但是通过分层布局渲染,最后出来的效果也会非常丰富多彩。

这样说说,可能很难理解,我们来看个例子,程序写的例子是:demo.page。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# @homepage ()
  # @faq ( "演示列表" )
  # @servicesItem ( "idea" )
  HelloWorld
  #end
  # @servicesItem ( "design" )
  四则运算
  #end
  # @servicesItem ( "apps" )
  简单数据维护
  #end
  # @servicesItem ( "mobile" )
  站内邮件系统
  #end
  #end
#end
运行结果如下:

可能看了有些云里雾里,但是不管怎么样,你看到了,只要写非常少的内容,就可以出来非常多的结果。

通过布局的支持,程序员不用管js,不用管css,不用管header,footer,不用管页面结构,只用管自己的那点事儿,就可以了。

国际化,可能对于小型个人网站来说,无所谓,但是对于大型企业来说是经常要用到的。TinyUI展现框架对国际化有良好支持,支持国际化资源方式国际化和国际化页面国际化两种方案。

国际化资源就很容易理解了,添加国际化资源文件,用国际化标签进行引用即可。国际化页面是指同样访问aa.page,在对其渲染时,会优先使用与访问者相同的语言的文件进行渲染,比如:存在aa.page,aa.zh_CN.page,如果非zh_CN语言的人来访问,渲染的是aa.page,zh_CN语言的人来访问,渲染的是aa.zh_CN.page两种方式总有一款适合你。

小结:

Tiny框架的前台开发,基本上帮助你解决了所有的难题,但是对你的工作没有任何限制,你可以用你想用的任何展现框架,做任何基于脚本语言的展现。当然还远远不止这些,框架还提供了缓冲功能,只要增加一点配置,就可以设定哪些页面进行缓冲,缓冲多长时间,等等。更多的好处与便利,需要你亲身体会。


相关文章
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
142 3
|
3天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
22天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
1月前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
117 8
|
2月前
|
JavaScript API 开发者
掌握ArkTS,打造HarmonyOS应用新视界:从“Hello World”到状态管理,揭秘鸿蒙UI开发的高效秘诀
【10月更文挑战第19天】ArkTS(ArkUI TypeScript)是华为鸿蒙系统中用于开发用户界面的声明式编程语言,结合了TypeScript和HarmonyOS的UI框架。本文介绍ArkTS的基本语法,包括组件结构、模板和脚本部分,并通过“Hello World”和计数器示例展示其使用方法。
86 1
|
2月前
|
缓存 测试技术 C#
使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题
【10月更文挑战第20天】本文介绍了使用 Radzen Blazor 组件库开发基于 ABP 框架的炫酷 UI 主题的步骤。从准备工作、引入组件库、设计主题、集成到 ABP 框架,再到优化和调试,详细讲解了每个环节的关键点和注意事项。通过这些步骤,你可以打造出高性能、高颜值的应用程序界面。
|
3月前
|
前端开发 开发者 UED
前端只是切图仔?来学学给开发人看的UI设计
该文章针对前端开发者介绍了UI设计的基本原则与实践技巧,覆盖了布局、色彩理论、字体选择等方面的知识,并提供了设计工具和资源推荐,帮助开发者提升产品的视觉与交互体验。
|
2月前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
196 0
|
4月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!

热门文章

最新文章