`
feargod
  • 浏览: 44164 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数据分层处理益处多多

阅读更多

 

做了将近两个月的android应用开发,第一版已差不多结束了。作为一个新手,我感受比较深的就是开发中最重要的是逻辑设计。我觉得就语言而言,从应用的角度来将没什么感觉,就按照官方的demo照葫芦画瓢就可以了,不会的就google一下,没有觉得什么。当然实现这些实用的控件是非常了不起的,那些背后的设计模式是非常好的。暂时没有去深究。在很方便的使用这些控件的时候,我感受比较深的是如何把应用做得稳定,如何提高访问的速度,如何降低内存的占用,等等。

这些方面我比较深刻的映象是对于数据流程的处理。上学期看了一些书,学了这些设计方面的知识。在一开始设计的时候,我把数据分成了三层:界面、领域、数据源。Android本身已经很好的实现了MVC,界面都是通过xml来编辑的。在一个手机应用中领域层的功能比较小,因为没有太复杂的计算,所以,在我的应用中,实际上领域层并不是很明显。有的时候直接界面层访问数据源层运行还好一些。数据源层中,主要处理来自手机数据库,网络,手机本地文件的数据。原本我觉得这些都是一个层次的,没有对内部进行仔细的设计。没想到在后面对这一部分改了好几次,甚至在临近发布了,又进行了一次比较大的改进。

举一个例子,我的应用中有一个功能是照片的显示,我最初的流程是这样的:

这样的考虑是觉得数据库和网络是一个层次的,我觉得都可以理解为从外部读取数据。而且为了在第一时间将结果呈现出来,所以这样的设计都是在读取到数据后马上反映到界面上。结果这样产生了很不好的效果。比如因为实际上界面上显示的数据来自不同的地方,至少有数据库和网络,那么就要做判断。我是用gridview来显示图片的。由于来源不同,在显示的时候需要将得到的数据拼凑起来,如果要符合同统一的规律显示就更加困难了。在实际的操作中,GridView如果从网络读取数据,就得另外开线程。就又需要考虑将得到的图像和相应的ImageView配对起来。网上有很多这样做的,事先用一个arraylist把需要放图片的ImageView和对应的图片存到里面。用一个回调接口,等下载成功后把得到的图片显示到界面上。但不管哪个,都比较复杂。过一段时间之后,或者另外的人来看都会比较费劲。GridView在显示的时候,一个方格可能会刷新很多次,会调用很多次getView方法,如果是开线程,就会开好多其实是一个目的的线程。这里就又需要想办法来限制。AndroidUI不是线程安全的,显示的任务只能交给主线程。这又要考虑线程之间的通信。读取网络很可能会出问题。线程又是不可控制的。所以这一切都会造成相册显示不稳定。

       后来我考虑了一下,做了一些改进:

这里其实是在数据源层内部也进行了明显的分层。现在数据库的数据来源只是网络,手机界面显示的数据只来自数据库。这样就可以解决很多的问题。因为手机界面的数据来源是单一的,所以就免去了很多的判断。并且很多的排序,筛选之类的工作都交给数据库完成,手机界面就只是负责显示的任务,减轻了很多的负担。从网络下载的图片数据不再直接显示到手机界面上,而是一律存储到数据库中。这就免去了主线程以外的线程来操控界面,省去了一些不稳定的因素。从网络下载图片放到软件启动的时候,这样用户打开相册的时候就可以直接从数据库读取图片,不用等待去网络下载,速度会更加快。而且专门有一个时间来从网络读图片就可以很方便的用线程池来维护这些下载图片的线程,使线程可控性更高。当这样清晰之后,可以节省很多代码,不容易出错,而且软件更加稳定。前两天看过一句话,我觉得很经典:“有两种设计方式,一种是把系统设计得足够复杂,以至于看不出明显的错误;另外一种是把系统设计得足够简单,以至于明显看不出错误。”深有体会啊。逻辑清楚简单的代码也容易让别人懂。

       这是一个我碰到的简单的例子,这些日子我体会了为什么设计模式很重要,好的设计思想可以把复杂的事情变得简单,简单的流程意味着可以做出更加强大的系统。好的设计思想使系统简洁,容易维护。简单的容易维护四个字后面意味着可以容易扩展,可以节约很多的成本。可以有更长的生命周期,所带来的价值太大了。这是我现在才体会到的。

       今天看了Mark Little的一篇文章,深有启发。所以决定在急着去学习下一个热门技术之前。好好总结一下这些平淡无奇但是实用的思路,经验。因为很多时候,直接提高一个系统的性能的往往不是尖端的技术,而是这些平常的但是久经考验的知识。由此,有勇气把这个简单的总结写了下来。

分享到:
评论

相关推荐

    易语言源码易语言表格数据分层处理.rar

    易语言源码易语言表格数据分层处理.rar 易语言源码易语言表格数据分层处理.rar 易语言源码易语言表格数据分层处理.rar 易语言源码易语言表格数据分层处理.rar 易语言源码易语言表格数据分层处理.rar 易语言源码...

    易语言源码表格数据分层处理.rar

    《易语言源码:表格数据分层处理》 在信息技术领域,数据处理是核心环节之一,而易语言作为一款国产的编程工具,以其简洁的语法和面向初学者的设计,为开发者提供了便捷的数据处理方式。本资源“易语言源码表格数据...

    易语言表格数据分层处理.zip易语言项目例子源码下载

    在“易语言表格数据分层处理.zip”这个项目中,我们看到的是一个易语言的源码示例,主要涉及的是如何处理表格数据的分层操作。在实际的软件开发中,数据的层次化处理是非常重要的一环,特别是在处理大量复杂数据时,...

    钣金件反求工程中数据分层处理研究及应用

    通过上述方法,可以有效地将层叠的点云数据进行分层处理,解决了由于钣金件变形导致的点云数据杂乱问题,大大提高了反求工程中数据处理的效率和准确性。同时,由于点云数据经过了有效的切片和分割处理,也可以更容易...

    Python数据分析(8)—-用Pandas实现数据分层抽样

    在进行数据处理时,我们有时需要在大量的样本中抽取出部分数据作为数据集进行模型训练或者模型验证,因此在本文中介绍分层抽样方法的python代码实现。 分层抽样: 分层抽样法也叫类型抽样法。它是从一个可以分成不同...

    数据仓库数据分层结构

    主要功能仍是将组织透过资讯系统之联机事务处理(OLTP)经年累月所累积的大量资料,透过数据仓库理论所特有的资料储存架构,作一有系统的分析整理,以利各种分析方法如联机分析处理(OLAP)、数据挖掘(Data Mining)之...

    企业数据分层管理及对接大数据平台.pdf

    本文档提供了企业数据分层管理和大数据平台的对接方法,讨论了传统数据库的限制、为什么需要分层处理、SAP 大数据分层处理逻辑架构、SAP 大数据分层数据部署架构、关键组件等内容,为企业数据分层管理和大数据平台的...

    3D打印软件开发中的分层处理技术

    分层处理技术的基本思想是根据 STL 模型的几何连续性进行整体分组排序,建立分层关系矩阵,然后对关系矩阵中的三角面片分别进行对边追踪求交,最后生成截面轮廓数据。 在分层处理算法中,基于分组排序和对边求交的...

    矢量数据的一种分层动态组织方法

    文章最后强调,矢量数据的分层动态组织方法有利于GIS中的各种信息提取、综合及管理,它提高了数据处理的效率和灵活性。通过这种组织方式,可以更方便地对矢量数据进行操作,如快速检索、更新、删除等,极大地提高了...

    语音数据分层部署方法.docx

    语音数据分层部署方法 语音数据分层部署方法是指在语音通信系统中,将语音数据分层部署到不同的频率小区,以提高语音数据的传输效率和质量。这种方法可以根据不同的语音业务和频率小区来灵活地调整语音数据的分层...

    Oracle数据仓库的分层管理器解决方案

    Oracle 数据仓库的分层管理器解决方案是针对大数据时代地学空间数据存储、分析与管理问题...总的来说,Oracle数据仓库的分层管理器是应对海量地学数据挑战的有效解决方案,它优化了数据处理流程,提升了信息利用效率。

    气象卫星数据处理分层调度模型仿真.pdf

    在处理这篇文章的知识点之前,我们首先要理解文章的主题——气象卫星数据处理分层调度模型仿真。这篇文章主要讨论了如何通过一个分层调度模型来处理和调度气象卫星地面应用系统复杂的数据处理流程,以及如何利用...

    大数据环境下该如何优雅地设计数据分层.docx

    数据分层的主要目标是使数据处理过程更加有序、高效且易于维护。以下将详细介绍数据分层的重要性和具体实施方法。 首先,我们要明确为什么要进行数据分层。数据分层有助于清晰数据结构,每个层次都有其特定的功能,...

    分层数据管理和树状结构

    在数据库管理中,分层数据的处理是一项常见但又充满挑战的任务。由于关系数据库的基本结构是平面化的表,因此如何有效地存储和查询分层数据成为了数据库设计者们关注的重点。分层数据是指那些具有明显的层级关系的...

    数据分层汇总交叉报表SQL语句实现方法

    数据分层汇总交叉报表是数据分析领域中常见的需求,主要用于管理层获取多维度的业务洞察。在管理系统中,这种报表通常需要处理复杂的数据结构,以便展示不同层次的汇总信息。本文将探讨如何利用SQL语句实现这样的...

    计算机网络-04 数据通信分层的好处.mp3

    计算机网络-04 数据通信分层的好处.mp3

    城市警用地理信息数据分层及命名规则(GAT 532-2005).pdf

    城市警用地理信息数据分层及命名规则(GAT 532-2005)

    Mysql分层数据管理

    分层数据管理是数据库设计中的一项重要技术,特别是在处理复杂层次结构时。通过对比邻接表模型和闭包模型的特点,我们可以看到,不同的场景下应选择最适合的模型来满足性能需求。随着大数据和云计算的发展,未来分层...

Global site tag (gtag.js) - Google Analytics