`

NET 应用架构指导 V2 学习笔记(九) 表现层指导

阅读更多

  本章将会讲述在表现层的设计中的关键问题。帮助你理解在典型的分层应用架构中表现层是怎么杨的?通常包括什么?设计表现层会碰到的关键问题?你将会看到设计指导,推荐的设计步骤,相关的设计模式,可以选择的技术。

  表现层组件的实现包括用来显示的用户接口,以及对于用户交互的管理。显示包括用户输入和显示的控件,还有管理用户的交互行为。下图中的粗黑线框中的内容就是表现层。

  

  表现层通常包括下面的部分:

 

  •   UI组件。就是应用用来显示和接受用户输入的可视化元素。
  •   表现层的逻辑组件。表现逻辑是定义了逻辑行为和结构的代码,是独立于UI实现的。当实现了独立的表现模式,表现逻辑组件会包括Presenter、Presentation Model、ViewModel组件。表现层组件也可能会包含表现层的Model组件,封装了来自业务逻辑层的数据,或者是表现层的Entity组件,封装了方便表现层消费的业务逻辑和数据。

  通常的设计考虑

  在设计表现层的时候,你需要考虑很多关键的因素。可以参考下面的准则,确保你的设计满足应用的需求:

  •   选择合适的应用类型。应用的类型会影响你的表现层选择。明确你是否需要实现富客户端、web client,还是一个rich internet(RIA)应用。最好基于应用的需求,组织的需要,和基础设施的限制,做出选择。
  •   选择合适的UI技术。不同的应用类型提供了不同的开发表现层技术。每一种技术都有优点,都会影响你设计表现层。
  •   使用相关的模式。可以参考那些证明可以解决问题的模式。例如:MVP,MVC。
  •   分离关注点。使用专注的UI组件,集中于呈现、显示内容。使用专注的表现逻辑组件,管理用户交互的过程,可以保证你可以进行单元测试。
  •   坚持用户驱动设计。在设计表现层之前,先对用户进行了解。用户调查,采访,确保设计的表现层可以满足用户的需求。
  • Consider human interface guidelines。考虑人机交互,例如向导式的界面(不知道翻译的是否正确)

  特定的设计问题

  下面的设计中遇到的一些问题:

  •   Caching缓存
  •   Communication通信
  •   Composition容器
  •   Exception Management异常管理
  •   Navigation导航
  •   User Experience用户体验
  •   User Interface用户界面
  •   Validation验证

  Caching缓存

  缓存是提高应用性能和UI响应的最佳技术。你可以在表现层使用数据缓存,来优化数据查询,避免网络来回访问,避免不必要重复处理。可以参考下面的指导:

  选择合适的缓存位置,例如:内存或者是硬盘。如果你的应用部署在web服务器场,避免使用本地缓存需要同步数据的问题。通常来说,对于web和应用服务器场的部署,考虑使用事务资源管理例如SQL SERVER,或者是支持分布式缓存的产品,例如:Memcached,或者是微软的Velocity缓存技术。但是,如果单个服务器的变化不是关键的,或者是数据变化很慢,内存缓存可能是比较合适的。

  •   当使用内存缓存的时候,考虑将缓存的数据格式化一下,使用对象而不是数据库的原始格式。但是避免缓存易变化的数据,因为如果数据不断的变化,创建和获取数据的代价会超出使用缓存带来的好处。
  •   不要缓存敏感数据,除非你进行了加密。
  •   不要想着依赖于缓存的数据,它可能已经被移除了。同样,要考虑到缓存的数据已经失效了。例如:当进行一个业务处理的时候,你可能需要获取最新的数据应用到处理中,而不是使用缓存的数据。
  •   考虑缓存数据的授权。如果用户访问数据的角色不同,要针对用户角色对缓存授权。
  •   如果你是用多线程,确保对缓存的访问是线程安全的。

  Communication通信

  •   考虑使用异步操作,或者是多线程,避免在WinForm或者是WPF中需要长时间运行造成的UI阻塞。在ASP.NET中,考虑使用ajax实现异步请求。如果运行时间过长,给用户进度提示,同时允许用户取消等待。
  •   避免将UI呈现和UI处理混在一起。
  •   在使用消耗较大的调用的时候,例如调用webservice或者是查询数据库,需要考虑是分解为多次的调用,每次小数据量,还是用较少的次数,每次多获取一些数据。如果需要请求大量的数据来完成功能,考虑先获取需要的数据,然后通过隐藏的线程获取其他数据,或者是在用户需要的时候再获取其他数据。

  Composition容器

  如果表现层使用在运行的时候组成的独立的模块和视图,你的应用是否很容易开发和维护?UI容器模式在运行的时候创建视图和表现布局。这种模式帮助最小化代码和库的依赖,否则在依赖改变的时候,需要重新编译和部署。容器模式帮助你实现共享、重用、可代替的表现逻辑和视图。在设计的时候可以参考下面的原则:

  •   避免组件之间的依赖关系。例如:使用抽象模式。考虑使用在运行的时候依赖注入的模式。
  •   考虑使用模板。例如:使用模板视图模式来组成动态web页面,确保可重用和一致性。
  •   考虑用可重用的模块化部分来生成视图。例如:通过使用那些容易添加的可分离的模块,来解耦你的应用。
  •   和表现层通信的时候,考虑使用松散耦合的通信模式。降低组件的耦合,提高可测试性和灵活性。

  Exception Management异常管理

  设计一个集中的异常管理机制,以一种一致的方式来捕获和管理意外的异常。要考虑异常信息在逻辑层和物理层之间的传播,甚至是跨越可信边界的传播。可以参考下面的原则:

  向用户提供友好的错误提示信息,确保在错误提示、错误页面、日志文件、审计文件中没有暴露敏感信息。如果有可能的话,提供一致的状态,如果不行就终止它。

  确保异常信息的捕获,而不是在全局错误的地方才捕获,在异常发生之后释放资源和恢复状态。全局异常显示的是未处理的异常,未处理的异常表明系统处于不一致状态,可能需要关闭重新启动。

  区分系统异常和业务错误。在发生业务错误的时候,给用户有好的提示,允许用户重新尝试。发生系统异常的时候,显示有好的提示,记录日志,帮助查找解决问题。

  只捕获你可以处理的异常,在不必要的时候不使用自定义异常信息。不适用异常来控制应用逻辑。

  Navigation导航

  •   设计自己的导航策略,确保用户通过你的导航和页面很容易的导航,以便你将导航从表现UI和UI处理中分离出来。确保在应用中,导航链接的显示和控制是一致的,减少用户的疑惑,隐藏应用的复杂性。参考下面的原则:
  •   设计工具条和菜单,帮助用户找到UI提供的功能。
  •   考虑使用向导,以一种可以预料的方式实现导航,如果使用的话,需要考虑向导之间的状态保存。
  •   避免导航事件的重复处理,避免硬编码导航的路径。考虑使用Command模式处理从多个来源的请求。

  User Experience用户体验

  良好的用户体验会将可用的和不可用的应用区分开来。感觉到的表现要比实际表现更重要。例如:用户不想等很久,页面才加载好。换句话说,也许就是几毫秒的UI区别,都会感觉应用不好。考虑使用调查、可用性学习、统计、面对面的交流来了解用户到底需要什么,希望你的应用提供什么,用这些结果来设计一个高效的UI。可以参考下面的原则:

  •   不要设计过于复杂的界面。为每一个关键的用户场景提供一个清晰的路径,考虑使用颜色和动画吸引用户关注UI的改变,例如状态的改变。
  •   提供帮助和有益的错误提示,不要暴露敏感信息。
  •   如果需要长时间执行,不要阻塞用户UI。提供进度的提示,给用户取消的机会。
  •   考虑给用户提供灵活的、自定义UI的个性化操作。
  •   考虑支持本地化和全球化,即使在设计的初始阶段不是主要的关注点。

  User Interface用户界面

  设计一个合适的用户界面,支持需要的数据输入和验证。可以参考下面的原则:

  •   考虑使用分离的表现层模式。例如:MVP。使用模板提供一致的界面。避免过于复杂的布局。
  •   考虑使用表单的方式来实现收集格式化数据的功能,文档的方式来实现收集随意输入的数据,向导的方式来实现需要序列化、或者是流程性数据驱动功能。
  •   避免使用硬编码的字符串。
  •   开始你的应用的访问群体。再设计输入的时候考虑特殊的用户群体,例如:为看不见的人士提供文字输入,为视力不好的人士提供文字和输入框放大的功能,考虑用户在没有其他输入设备的时候,只是用键盘输入的功能。
  •   考虑不同的屏幕大小,不同类型的设备,手持设备,触摸屏。创建web应用的时候,考虑使用css来布局,将会提升性能和可维护性。

  Validation验证

  设计一个高效的数据输入和验证策略对于安全和正确操作来说是关键的。确保表现层具有输入验证,就好像业务逻辑层需要有逻辑验证一样。可以参考下面的原则:

  输入验证应该由表现层来处理。同时业务规则的验证应该有业务逻辑层来处理。但是,如果业务逻辑层和表现层在物理上是分离的,业务逻辑的验证应该被镜像到表现层中,提高可用性和响应。可以使用元数据或者是在两层中使用通用的验证组件来实现。

  在验证策略中要设计限制、拒绝、审查恶意输入。Investigate设计模式和第三方的类库可以帮助你实现验证。识别适合验证的业务规则,例如:传输限制,实现综合的验证,确保这些规则没有被妥协。

  确保你正确的处理了验证错误,避免在错误提示中暴露敏感信息。另外,确保日志记录了验证失败,帮助查找发现恶意的行为。

  

  未完待续。。。。。。。。。。。。。。。。。。。。。。。

分享到:
评论

相关推荐

    牛【SystemVerilog】路科验证V2学习笔记(全600页)

    "牛【SystemVerilog】路科验证V2学习笔记(全600页)"是一份详尽的学习资料,涵盖了路科验证方法论的第二版(V2)在SystemVerilog中的应用。 笔记内容可能包含了以下几个关键知识点: 1. **基础语法**:...

    【SystemVerilog】路科验证V2学习笔记(全600页).pdf

    SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...

    【SystemVerilog】路科验证V2学习笔记(全600页)

    SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 ...

    SystemVerilog路科验证V2学习笔记

    SystemVerilog路科验证V2是一个SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注,可快速获取自已需要的知识,喜欢的平台可下载试试! 介绍设计描述和验证语言SystemVerilog的基本...

    AADL 学习笔记_V2_aadl_

    在“AADL学习笔记.docx”文档中,读者可以期待找到对这些概念的详细解释、实例演示以及如何将它们应用到实际项目中的指导。这份笔记对于正在学习AADL或准备采用AADL进行系统设计的人来说是一份宝贵的资源。

    《合作式智能运输系统 车用通信系统应用层及应用数据交互标准》(TCSAE 53-2017)全文 中国 V2X 标准.pdf

    整体而言,TCSAE 53-2017标准为V2X通信技术在中国的应用提供了明确的技术指导和实施框架,同时保证了交通安全和效率。这个标准的推广实施,能够帮助业界统一技术标准,为以后进一步研究和开发V2X相关产品奠定坚实的...

    Application Architecture Guide v2

    《应用架构指南v2》是微软发布的一份深入探讨应用架构的重要文档,旨在为软件开发者、架构师和项目管理者提供一套全面的指导原则和最佳实践。这份指南详细阐述了如何设计、构建和优化应用程序,以确保其高效、可扩展...

    大型金融数据中心网络架构设计V2.pptx

    "大型金融数据中心网络架构设计V2.pptx" 本资源摘要信息来自一个关于大型金融数据中心网络架构设计的PPT文件,内容涵盖了金融数据中心网络架构设计的演进路线、金融网络应用场景的划分、数据中心应用服务域、双活...

    【SystemVerilog】路科验证V2学习笔记.7z

    本文将深入探讨“路科验证V2”学习笔记中的关键知识点,主要基于提供的"SV部分讲义"。 一、SystemVerilog基础 1. **数据类型**:SystemVerilog提供了丰富的数据类型,包括位(bit)、逻辑(logic)、整型(int)、...

    王晓波-从微服务到Serverless+架构应用与实践V2-32页.pdf

    微服务和Serverless是当前云计算架构设计中非常热门的概念,它们在解决传统单体应用所面临的可伸缩性、运维复杂性和快速迭代等问题上表现出了明显优势。在王晓波所著的《从微服务到Serverless+架构应用与实践》这份...

    kinect V2 学习资料

    Kinect V2应用程序兼容x86和x64架构,但不兼容ARM系统,这是开发过程中需要注意的。 综合上述内容,以下是一些Kinect V2学习资料中可能包含的知识点: - 安装Kinect V2驱动程序及其与计算机的连接方法。 - 创建...

    LSD-TEST430F5438-01_V2_1学习板实验指导书

    通过以上知识点的梳理,可以看出LSD-TEST430F5438-01_V2_1学习板实验指导书覆盖了从硬件资源介绍到软件编程实践的全面内容,旨在帮助学习者深入理解MSP430F5438单片机的各项特性和实际应用,是一份非常实用的学习...

    V2X应用层协议便准(day2)asn1.rar

    "V2X应用层协议标准(day2)asn1.rar"这个压缩包文件提供了V2X应用层ASN.1(Abstract Syntax Notation One)编码文件,这是一个国际标准,用于定义数据结构和编码规则。 ASN.1是一种强大的数据表示语言,常用于通信...

    【论文】旷视科技提出的新型轻量架构ShuffleNet V2

    随着移动设备计算能力的不断提升,以及深度学习技术的不断进步,轻量级神经网络架构设计将继续成为研究热点,ShuffleNet V2作为其中的重要里程碑之一,其创新点和实践经验对后续研究与应用都将有着深远的指导意义。

    云平台系统架构设计文档v2.docx

    云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2....

    微服务架构分享V2.pptx

    微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 ...

    视皮层v2区特性

    在这个模型中,单元能够模拟V2区神经元对接收角度刺激时的行为表现,这对于理解和模拟V2区的功能至关重要。 #### 四、V2区在视觉处理路径中的位置 在视觉处理路径中,V2区处于一个中间位置,连接着初级视觉皮层...

    中兴物联ME3760_V2公网模块硬件用户指导手册_V1.6.pdf

    文档中更新了TD-LTE band41频段及其射频性能指标,说明了模块在新的频段中的性能表现,并根据实际需要调整了模块在TD-LTE的速率,这对于模块在特定频段下的应用具有重要的指导意义。 在硬件用户指导手册中,还提供...

    2020C-V2X“新四跨”暨大规模先导应用示范活动-接入层和AID配置文件1

    2020年举行的C-V2X“新四跨”暨大规模先导应用示范活动,是中国推动车联网技术发展的重要实践,旨在验证和优化C-V2X的性能,确保其在实际环境中的可靠性和安全性。 该活动中,接入层参数和AID(Access Identifier)...

    基于5G的车联网体系架构及其应用研究.pdf

    本研究聚焦于利用第五代移动通信技术(5G)构建的车联网体系架构及其应用。随着信息技术的不断演进,传统的通信网络架构已经无法满足车联网对低延迟、高带宽和高可靠性的需求。因此,研究提出了一种基于5G的智能交通...

Global site tag (gtag.js) - Google Analytics