抛砖引玉,提出一些知道的做法,欢迎大家提出更多做法。
对于网站来说,UI最终的形式无非是(X)HTML + 脚本 + 样式,现在的问题是怎么样生成这些前端的元素,在以下几个方面达到平衡:
(假设有开发和前端两种角色,前端负责表现逻辑和表现,而开发负责业务逻辑和业务数据)
1) 开发人员的工作量,工作难度
2) 前端开发人员(后面省略为前端)的工作量,工作难度
3) 产品(假设前端属于产品部)对UI的改动需求能否快速落实(能否只依靠前端实现)
4) 服务端的压力(客户端的性能问题暂时不考虑)资源分享
第一种方式:XML + XSLT
数据源是XML,由开发人员提供,XSL可以一开始由开发人员写,以后由前端参与开发和维护。
T的过程可以在服务端进行,优点是搜索引擎友好,缺点是服务端压力大。
T的过程也可以在客户端进行,和服务端进行的优缺点互反。
这种方式比较适用访问量大(特别是客户端进行T)、交互简单的系统,比如论坛,因为服务端只需要提供数据源,而XSL则是静态资源可以在客户端缓存。
这种方式的优点是,如果前端直接维护XSL,那么在开发不介入的情况下可以直接对页面布局等进行调整,并且可以做到最好的性能。
而缺点则是,学习成本比较大,如果在客户端进行转换那么搜索引擎支持会不好,而且XSL相对比较难以维护,实现复杂逻辑成本比较大。
第二种方式:ASP.NET Webform
最常见的方式,基于控件,由控件生成HTML,开发也可以直接操作服务端控件。这是一种开发人员主导的方式。
这是一种普适的方式,什么应用都可以支持。缺点是不太利于实现UI快速改动,前端很难参与aspx的维护,因为很多UI都是由控件进行,开发人员很可能在后端操作控件进行一些UI的修改。
第三种方式:纯粹的javascript + 服务端数据源
所有和呈现相关的逻辑,都由javascript来写(可以依赖jquery,jtemplate等组件),以AJAX方式从服务端获取数据进行数据的填充和一些业务逻辑的实现。
这是一种前端主导的方式,会写大量的脚本来实现逻辑,需要的数据从服务端获取。
这种方式比较适合前端互动比较丰富的应用,比如网页游戏。
优点是,前端对页面的布局、行为有很大的自主权,并且服务端的压力也比较小。
缺点是,需要写大量的脚本代码,难度大并且容易出错,并且容易出现安全问题。资源示例
第四种方式:模板引擎
模板引擎通过基于HTML的模板加上各种预定义的占位符来实现数据的动态填充。在保证了UI灵活性的同时也保证了非常高的性能。
这种方式对于需要有多界面的新闻系统、博客系统,甚至每一个版块布局都不同的论坛系统来说很适用。
虽然足够灵活,但是前端和开发的配合还是双向的,也就是前端还是需要知道开发提供的数据结构。
并且,对于交互比较复杂的应用来说,可能需要用模板引擎预定义的脚本来写很多逻辑,造成难以维护。
第五种方式:ASP.NET MVC
这同样是一种普适的方式,只不过更适用于面向互联网的网站,而不是面向局域网的内部应用。
虽然MVC已经在UI和UI逻辑方面实现了很好的分离,但是我觉得还是很难在开发没有介入的情况下直接对页面的布局等进行调整。
第六种方式:在服务端为HTML的适当位置动态注入数据
这是一种比较新颖的方式,在服务端加载HTML作为模板文件,然后写代码修改HTML中的dom元素,为元素填充数据。
比如一个a.html配合a.shtml,a.shtml(httphandler)加载a.html然后解析HTML文档,从数据库加在数据填充到HTML中,输出这个HTML。
前端提供的HTML文件可以直接使用,不需要加任何模板标签,不需要加任何控件,所有数据由代码填充进去。
可以像jquery一样支持各种方式来搜索数据的填充路径,也可以把一段html作为模板,循环复制成一个列表页面。
优点是,前端维护HTML/脚本/样式,开发人员写代码生成数据,填充数据,彻底的分离。
缺点是,前端不能改变一些涉及到路径的元素(比如我们通过className来定位元素,前端改变了className就不行),还有性能可能会差一点。
第七种方式:在服务端为HTML动态载入数据,在客户端注入数据
还是以HTML作为模板文件,只不过这个数据组装的过程在客户端进行,相比第六种方式有更好的性能。
也就是服务端不用解析HTML文档,直接为HTML文档中加上一个JSON数据片段,这些数据是这个页面需要的所有数据。
然后,在服务端使用类似这类的框架编译时生成填充数据到HTML的脚本,这个填充过程由客户端执行。
代码还是像第六种方式一样写,但是这段代码会完成两个工作,一个是把部分代码生成脚本文件,第二是把部分代码生成json数据写到页面上。
好像还没看到过有现成的框架是这么干的,难道这种方式不太实用?
其实演变一下的话,也可以是直接写脚本,不用ScriptSharp来生成,但是在服务端写的很大的一个好处是可以直接利用强类型的实体。
想象一下这样的伪代码:Document.FindElement("path").Fill(product.Take(10), product => product.Name);
这样,product这个List的前10项就会以json输出在页面上,而定位元素以及赋值的代码也会以jquery/javascript代码输出在页面上。
优缺点和第六种方式一致。
第八种方式:由服务端生成HTML
这是一种比较极端的方式,所有HTML由代码生成,可以拼字符串也可以利用类似这类的框架。
适合UI随着业务逻辑变化非常大的流程系统,或者一些模板生成工具,不太适合业务系统。
相关推荐
在本章"Python实现Web UI自动化测试实战-Chapter-12"中,我们将深入探讨如何利用Python语言进行高效的Web用户界面(UI)自动化测试。这一领域对于软件开发和测试团队至关重要,因为它能节省大量手动测试的时间,提高...
其次,Service与UI交互的几种方式: 1. 广播接收器(BroadcastReceiver):Service可以在完成特定任务后发送广播,UI通过注册BroadcastReceiver接收广播,从而更新UI。 2. Handler/Message:Service通过创建Handler...
在给定的场景中,我们将讨论如何利用观察者模式来实现一个Service通知多个Activity更新UI的功能。 首先,我们需要理解Service和Activity之间的交互方式。在Android中,Service是后台运行的组件,而Activity是用户...
在IT行业中,UI(User Interface,用户界面)设计是一项至关重要的任务,特别是在开发应用程序时,如我们这里讨论的“计算器”项目。一个优秀的计算器UI不仅要美观,还要易于理解和操作,以便用户能快速、准确地执行...
SAP UI5是SAP公司推出的一种基于HTML5的企业级用户界面技术,它支持响应式设计,使开发者能够创建适用于多种设备和屏幕尺寸的用户界面。SAP UI5与SAP HANA的结合,可充分利用SAP HANA的内存计算能力,实现实时数据...
LUA是一种轻量级的脚本语言,广泛应用于游戏开发,包括《魔兽世界》(WOW)中的UI插件制作。几个推荐的LUA编辑工具有B:Lua、Lua Eclipse和EditPlus。这些工具提供了代码高亮、自动完成、错误检查等功能,有助于提高...
本篇文章将深入探讨如何使用OOP的方式来扩展ExtJS UI组件,并结合更新版的实现方法进行讨论。 首先,理解ExtJS的基础是至关重要的。ExtJS提供了一套完整的组件模型,包括窗口(Window)、面板(Panel)、表格(Grid...
基于以上信息,我们可以讨论以下几个IT知识领域: 1. **Git**:Git的核心概念包括版本控制、分支管理、合并和提交历史。学习如何使用Git进行代码的版本迭代、协同开发和代码回溯是非常重要的。 2. **用户界面设计*...
在你提供的资源中,我们讨论的是MPlayer的UI代码,特别提到了"Delphi",这表明UI可能使用了Delphi编程语言来开发。 Delphi是一种基于Object Pascal的集成开发环境(IDE),由Embarcadero Technologies公司维护,它...
SwiftUI是苹果公司推出的一种声明式用户界面框架,用于构建iOS、macOS、watchOS和tvOS等平台上的精美应用程序。这个框架的核心理念是通过简洁的代码定义UI元素和它们的交互方式,使得开发者可以更加专注于应用的逻辑...
本文将详细讨论几种常见的数据传递方法,包括Key-Value Observing(KVO)、Protocol、Delegate、NSNotification以及SignalLeton,以帮助开发者更好地理解和运用这些技术。 首先,Key-Value Observing(KVO)是...
【标题解析】:“网站后台ui管理系统.zip”这个标题暗示了我们即将探讨的是一个与网站后台管理相关的用户界面系统。UI(User Interface)是用户与计算机系统交互的图形化设计,通常包括布局、颜色、图形、字体等元素...
博客文章中可能会讨论以下几个关键点: 1. **集成步骤**:如何将TabHost和ViewPager集成到同一个应用中,包括设置TabHost的各个标签,配置ViewPager,以及处理两者之间的交互。 2. **自定义适配器**:可能涉及创建...
在本文中,我们将深入探讨如何使用Vue.js框架与Element UI库来...以上就是使用Vue.js和Element UI实现表格横向和纵向拓展的关键知识点。通过熟练掌握这些概念和技巧,你可以创建出富有交互性和扩展性的企业级应用界面。
描述中提到了几个关键功能,首先是“随机播放”,这是一种常见的播放模式,允许用户无需手动选择下一首歌曲,系统会自动按照随机算法进行播放,增加听歌的趣味性。其次,“更换背景”意味着用户可以自定义播放器的...
在Android应用开发中,UI框架的设计是至关重要的,它直接影响到应用的用户体验和代码的可维护性。"android项目整体UI框架"这个主题主要涵盖了三个方面:自定义Android项目的底部任务栏、实用Fragment的切换以及项目...
JqueryUI中的甘特图组件为开发者提供了一种直观的方式来展示复杂的数据流和时间线信息。 在"JqueryUI甘特图源码_f5d014bf-c4cb-4a76-b825-cdbbdd0fcfc7.rar"这个压缩包中,包含了一些关键文件,让我们一一剖析它们...
7. **www.pudn.com.txt**:这是一个可能包含链接、引用或者其他信息的文本文件,可能指向PUDN(编程开发网络),这是一个提供编程资源和技术讨论的网站,用户可能需要参考这个文件来获取更多关于OFDM系统或UI设计的...
本文将深入探讨如何在Android Studio中实现几种基本的Activity效果,这些效果对于提升用户体验至关重要,特别适合正在入门Android编程的开发者。 Activity在Android系统中扮演着核心角色,它是应用程序的基本构建块...
3. **实现布局**:根据设计原型使用XML或其他技术实现UI布局。 4. **测试与反馈**:进行多轮测试,并收集用户的反馈意见。 5. **优化与迭代**:基于反馈进行UI的持续优化与迭代。 #### 七、总结 通过上述讨论可以...