近日,互联网动物园的各位小伙伴们召开了一次会议,考虑到大火的电子商务,准备在动物园里开发一个电商系统。首先上台的是销售山鸡,清了清嗓子,说道,人类正在进行电商革命,动物园也需要上一个电商系统,必要性有三点,第一点是赚钱,第二点是迅速的赚钱,第三点是赚很多的钱…说完这点后,小伙伴们激动的开始想起之后的场景,所有的栏杆上都用钻石镶嵌,一天来五顿饲料…

产品狗马上敏锐的嗅到了巨大的机会,开始思考起如何贯彻起赚钱的思路,采用什么方法来提高PV,采用什么支付系统来支付,构建一个完整的生态系统,如何提高用户的可用性等等。说到这里,他斜瞥了下旁边的设计狮,最后说道,具体的界面就交给设计狮了。树上的程序猿们自顾自的吃着香蕉,丝毫没注意到下面的骚动。

骚动持续了几日,产品狗和设计狮到香蕉树下,摇了摇香蕉树,摇下了许多香蕉还有程序猿。产品狗介绍了下需求,让程序猿评估下什么时候能搞定。看着初步给的评估结果,产品狗倒吸了一口气,慢条斯理的说,这个产品的最重要的部分就是查询,时间太长了,赶快想想办法给我先上。程序猿开始捂着脑门有点无语了,只有晚上加班呗。

在一个月黑风高的夜晚,程序猿翻了翻尘封已久的教科书,翻到了第187页,指着第二段:

查询是信息系统中一种常见的需求,这种需求经常会有以下特点:演变快,用户体验要求高(性能和操作),对于复杂的查询的代码可维护性要求高(易维护,可分模块高)。

…此处略去几千字。

翻了翻产品狗给的PRD,果然高大上,就是跟某猫长得挺像。威猛的程序猿看了以后拍了拍胸脯,吼了几声,草泥马,先干再说吧…

一、 查询界面:

1.查询条件区

能够根据关键字,类别,属性,价格等等进行筛选商品。

2.展示区

3.分页区

二、 操作逻辑:

用户会在查询条件区中输入条件,点击提交。

展示查询结果,保存查询条件。

三、 解决思路

程序猿开始对这个问题进行剖析:

第一点,对于一个查询条件最简单的处理当然就是从request中获取参数,然后调用服务,得到结果,最后放入到模板中展现,恰似一根面条从头到尾那么自然简单。但对于几十个条件的组合来说,那就是一碗面条那么复杂了。面条与面条之间互相纠缠,无法解开。任何简单的事情到了一定量级之后就不简单。

第二点,http中的key=value来表示数据的传输很经典,但是对于业务的理解来说恰恰相反。在后台逻辑里面向对象的是主流,对象化了之后可以很好的理解这些参数的意义,可维护性大大提高。

第三点,渲染一个几十个组件的界面代码最好能将各自的模型到控件展现数据模型的转换给分割开来,便于维护代码也便于多人开发模块。正如只有适合多线程工作的数据结构才能有效实现的多线程处理,编码工作也是如此。

查询模型组件:

1.Parser(解析器)会将request中的参数转换成Query对象。

主要包括参数整理,字符串à对象,还有页面参数到对象的一些映射操作。

2.Query(查询对象):业务的实体元素,里面存储的都是和业务操作相关的对象。

业务逻辑的接口会从Query里的属性做进一步的操作,将查询参数传递到后台的服务,如数据库,搜索引擎,web api进行处理,得到业务中间结果Result,并存放在Query对象里。

3.Render(渲染器):

将Query对象中的model在合适的条件下将其转换为页面显示的元素。

一般情况下包括是否展示某个控件的逻辑,控件的数据模型,和控件的展示初始参数。

举例来说,类目渲染器负责类目控件的数据模型填充,如类目名称及其下符合条件的商品的数量总和。

---------------------------------------------完结---------------------------------------------

Thinking in 查询设计的更多相关文章

  1. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)

    阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...

  2. EntityFramework 学习 一 Entity Framework 查询设计

    First/FirstOrDefault: using (var ctx = new SchoolDBEntities()) { var student = (from s in ctx.Studen ...

  3. 字段username没有默认值查询(设计数据库一定要养成好习惯,不是主键最好设置为可以为空)

    今天创建了一个表,但是username作为外键(不是主键)没有设置为可以为空,结果提交表单时忘记写username就报错了

  4. 大数据查询——HBase读写设计与实践

    导语:本文介绍的项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的 ...

  5. 大数据查询——HBase读写设计与实践--转

    背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的不断 ...

  6. 一种简单的CQRS架构设计及其实现

    一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:"如何设计一个松耦合.高伸缩性.易于维护的架构?".之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻 ...

  7. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  8. .NET架构设计、框架设计系列文章总结

    从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以 ...

  9. .NET应用架构设计—用户端的防腐层作用及设计

    阅读目录: 1.背景介绍 2.SOA架构下的显示端架构腐化 3.有效使用防腐层来隔离碎片服务导致显示端逻辑腐烂 4.剥离服务调用的技术组件让其依赖接口 5.将服务的DTO与显示端的ViewModel之 ...

随机推荐

  1. bzoj1089严格n元树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1089 这是一种套路:记录“深度为 i ”的话,转移需要讨论许多情况:所以可以记录成“深度&l ...

  2. FPGA设计者必须精通的5项基本功

    FPGA设计者的5项基本功:仿真.综合.时序分析.调试.验证. 对于FPGA设计者来说,练好这5项基本功,与用好相应的EDA工具是同一过程,对应关系如下: 1. 仿真:Modelsim, Quartu ...

  3. Android中preference标签的使用

    现在做公司任务的时候,经常会要去读Settings的源码,然后发现在xml文件中几乎全是用的preferenceScreen和preferenceCategory标签,很少有用布局和控件的,然后我就自 ...

  4. Java开发中所涉及的常用远程调用

    根据<Spring in Action>一书中指出,Java开发中常见的远程过程调用(RPC),常见的有一下四种方式: 1.远程方法调用(RMI) 2.Caucho的Hessian和Bur ...

  5. 运维平台cmdb开发-day2

    一 发送数据到api(Django的URL) 发送请求携带参数 requests.get(url='http://127.0.0.1:8000/api/asset/?k1=123') # <Qu ...

  6. css 定位position总结

    在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...

  7. GSON使用笔记

    GSON简介 GSON是Google开发的Java API,用于转换Java对象和Json对象,我在这里将记录一下GSON的简单使用 下载GSON 我们可以在其github仓库中下载,也可以使用Mav ...

  8. json-lib使用笔记

    今天再来记录一款生成JSON的工具——json-lib,它比较与我之前使用的FastJSON来说,使用都是很简单的,但是要使用json-lib要需要的jar包可真不少,所需要的依赖jar有八九个之多, ...

  9. AIX存储LV PV VG (转载)

    1.基本概念:PV 物理卷:普通的直接访问的存储设备,有固定的和可移动的之分,代表性的就是硬盘.vg 卷组:AIX中最大的存储单位,一个卷组由一组物理硬盘组成,也就是由一个或多个物理卷组成.pp 物理 ...

  10. VMware虚拟机如何设置从U盘启动

    要给虚拟机重新安装win7系统,想使用U盘重装系统的方式,就需要让虚拟机从U盘启动,以下内容就是虚拟机从U盘启动的全操作过程. 前期准备: 1.u盘启动盘 2.VMware虚拟机 具体操作步骤: 1. ...