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

产品狗马上敏锐的嗅到了巨大的机会,开始思考起如何贯彻起赚钱的思路,采用什么方法来提高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. Java通过aws java sdk在AWS S3上进行操作客户端

    有两种方式可以安装aws java sdk:方式一:可以在这个网站上下载适用于 Java 的 AWS 开发工具包https://aws.amazon.com/cn/sdk-for-java/点击网页右 ...

  2. Mac环境下终端(Terminal)用ssh 连接服务器问题 Received disconnect from 120.55.x.x: 2: Too many authentication failures for root

    由于这台Mac配置git生成公钥后,ssh连接就出现来这个问题 Received disconnect from 120.55.x.x: 2: Too many authentication fail ...

  3. Nginx优化指南

    大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...

  4. 解决近期linux下yum更新出现HTTP Error 404 NOT FOUND错误的办法

    本文转载自:http://tech.lezi.com/archives/47 最近两天使用yum的163源,出现404错误 [root@localhost yum.repos.d]# yum make ...

  5. java代码----对于数据类型Integer

    总结: 主要是方法的理解 老师曾经说过final 和fianlly的区别 我自己的理解就是 如果一个类的前面定义了final,那么它就不能被继承,派生子类,对于方法,那么方法就不能改变,变量前面也是必 ...

  6. 前端必须会的!!!关于对HTTP协议的理解、HTTP协议原理分析

    http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...

  7. 手机页面开发的meta

    <meta name="viewport" content="width=device-width, initial-scale=1"> 手机环境. ...

  8. 5月11日上课笔记-js简介

    一.js 1.javascript简介: 是一门脚本语言(弱类型编程语言)(php是脚本语言) 编程语言如java,先编译后运行 脚本语言不需要编译 作用: 表单验证 页面特效 语法:和Java类似, ...

  9. 【BZOJ】2938 [POI2000]病毒(AC自动机)

    题目 传送门:QWQ 传送到洛谷QWQ 分析 夏爷爷传送门 代码 #include <bits/stdc++.h> using namespace std; ; ][], fail[N*] ...

  10. 【UVa】1343 The Rotation Game(IDA*)

    题目 题目     分析 lrj代码.... 还有is_final是保留字,害的我CE了好几发.     代码 #include <cstdio> #include <algorit ...