关于标签系统的一点想法。

原创 2015年04月13日 14:06:08

我跟几个人谈到过我这个标签系统。

标签系统,tagging,在 web 2.0 时代大行其道,特别是 del.icio.us 大量应用而广受关注。但如今,随着 del.icio.us 的消逝鲜有人关注了。

但,标签系统是一个极具扩展力的系统,作为一种“元数据”信息,可应用的场景其实非常多样化。因为开展了开发外包业务,接触了几个需求以后,愈加觉得如此。比如有如下需求:

有一个订餐系统,类似“饿了么”,店家增加菜品麻婆豆腐,希望它加入“周二半价”活动,后来活动又多了一个“满10减1”。考虑到活动可能常常增加、变动,那么如何设计方案?

也许你不信,其实 tagging 可以很好地解决这一类问题,额,确切来说是加上装修器模式。

当界面显示某一菜品时,显示的信息其实与从数据库中取得的初始数据不同,比如对于每一道菜:

tag_decorators = [...] #init tag decorators

def tuesday_promote(menu_item):
  if menu_item.has_tag('周二半价') and today_is_tuesday():
    menu_item.price *= 0.5

tag_decorators.append(tuesday_promote)

menu = get_menu_from_db(...)
for item in menu:
  for deco in tag_decorators:
    deco(item)

render_html(menu)

如上可见,当“麻婆豆腐”遇上星期二时,它的价格就会打五折。相对于给每一个菜品表增加一个“周二半价”的字段,使用 tagging 让整个系统更加简洁。

在实现时,每一个 tag 和它所对应的 decorator 完全可以存储在数据库中,在后台新增加一个 tag 时,可以绑定相对应的 decorator,甚至 decorator 的某些参数,就可以实现不需要编程即可变更业务逻辑的目的。

在真正的业务代码中,肯定不会出现 menu_item.price *= 0.5 这种代码,每一个 decorator 的作用都要记录下来,应该会把 menu_item 作一个包装。

另外,把 decorator 放在数据读取层中会更加好,这样业务层的代码可以把标签系统当透明,程序员写起代码来完全没有心智负担。

版权声明:本文为博主原创文章,未经博主允许不得转载。

如何设计标签系统

今天在微信群里看见一道题: 某某:出一道系统设计题: 如何设计标签系统 。假设有一个电子书销售网站 我们现在需要给它设计标签系统 书是有标签的 用户的评论是有标签的 用户也是有标签的 希望这...
  • liu1003914035
  • liu1003914035
  • 2017年04月24日 16:43
  • 495

个性化标签系统--架构设计教程

花了点时间,写了一个教程,算是多年来对开源社区免费知识的一点点回馈。 需求文档,点击打开 个性化标签系统需求文档 需求分析/架构决策,点击打开 个性化标签系统需求分析文档 ...
  • kentkong1
  • kentkong1
  • 2014年12月03日 10:14
  • 930

关于标签系统的一点想法。

我跟几个人谈到过我这个标签系统。标签系统,tagging,在 web 2.0 时代大行其道,特别是 del.icio.us 大量应用而广受关注。但如今,随着 del.icio.us 的消逝鲜有人关注了...
  • lanphaday
  • lanphaday
  • 2015年04月13日 14:06
  • 10419

关于标签系统的又一点想法。

前段时间,写过一篇《关于标签系统的一点想法。》。但其实没有谈到里面的内容,是有一部分来自与刘鑫老师的聊天,当时他给了我许多肯定,也是让我觉得记录下来很有必要的原因。前一篇里没有提到,我跟刘老师谈到一个...
  • lanphaday
  • lanphaday
  • 2015年05月05日 18:25
  • 10215

关于物联网,人工智能的想法一

关于物联网,人工智能的想法
  • DONGWEIJHZHANGLI
  • DONGWEIJHZHANGLI
  • 2017年04月30日 20:35
  • 302

用户标签系统 数据库设计

需求背景 目前主流的博客系统、CMS都会有一个TAG标签系统,不仅可以让内容链接的结构化增强,而且可以让文章根据Tag来区分。相比传统老式的Keyword模式,这种Tag模式可以单独的设计一个Map的...
  • u010098331
  • u010098331
  • 2016年05月18日 18:25
  • 3947

标签:标记系统设计实践(完整版)

  • 2016年06月20日 16:14
  • 45.83MB
  • 下载

关于团队合作的一些看法

我现在待的公司是一个分公司,在软件开发上经常需要和各个分部进行合作,而在这段合作中,我渐渐发现了一些不可避免的问题。 特此记录一下,希望以后注意并想办法解决。 1.时差导致的工作延误 ...
  • u011107827
  • u011107827
  • 2015年04月09日 16:41
  • 438

关于泛设备系统的一点想法

“泛设备系统”这个名词,是笔者生编硬造的一个词语,指的是可以在不同平台设备上运行的、基于同一设计和系统组件(如内核)的系统。它是来源于一点新闻(有关报道如《谷歌证实Chrome OS将与Android...
  • dean_1000
  • dean_1000
  • 2011年07月29日 18:54
  • 100

大规模分布式存储系统:原理解析与架构实战.pdf(详细标签)

  • 2017年02月11日 14:33
  • 87.48MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于标签系统的一点想法。
举报原因:
原因补充:

(最多只允许输入30个字)