我跟几个人说过我的这个标签系统。
标签系统,tagging,在web 2.0时代大行其道,特别是del.icio.us被广泛使用而备受瞩目。 但是,现在随着del.icio.us的消失,很少受到关注。
然而,标签系统是高度可扩展的系统,并且可以用作“元数据”信息的场景非常多样化。 由于开展了开发外包业务,接触了一些需求后,我越来越觉得如此。 例如,有以下需求:
有“饿了么”这样的点餐系统,店里想增加料理中的麻婆豆腐,参加“星期二半价”活动,但之后又增加了“满10减1”。 考虑到活动可能频繁增加、变动,如何设计计划?
你可能不相信,其实tagging可以很好地解决这样的问题。 额,准确地说是追加装修模式。
在界面中显示菜肴时,显示的信息实际上与从数据库中获取的初始数据不同。 例如,每道菜的情况如下
tag _ decorators=[ . ] # inittagdecoratorsdeftuesday _ promote (menu _ item ) : if menu_item.has_tag '星期二半=0.5 tag _ decorators.append (Tuesday _ promote ) menu=get_menu_from_db(… (. ) foriteminmenu 3360 fordecointag _ Ford 在每个菜单中添加“星期二半价”字段,而tagging使整个系统更简洁。
在实现时,各tag及其对应的decorator可以完全存储在数据库中,在后台新追加tag时,通过绑定对应的decorator、甚至decorator的一部分参数。
在真正的业务代码中不会出现menu_item.price *=0.5这样的代码吧。 您应该记录每个decorator的角色并打包menu_item。
此外,将decorator放在数据读取层,业务层的代码可以使标签系统透明,程序员编写代码也不会造成任何心理负担。