美文网首页架构设计我爱编程
某装修平台项目技术总结

某装修平台项目技术总结

作者: dongshixiao | 来源:发表于2018-07-26 09:05 被阅读79次

    一、非技术层面

    1. 项目----拆分----> 模块

    项目开始时,应把项目分解为多个模块.按照模块间耦合度排序.按照低耦合==>高耦合开发.
    比如该项目的顺序就是:
    登录注册=>钱包模块=>我的模块=>商家=>任务=>工人=>IM=>订单=>工程
    前端和程序一块开始项目,稍微等登录注册写两个页面就可以开干了.缩短了项目周期
    前端15天 + 程序20天 = 35天 ===> 前端15天 + 程序20天 = 21天

    2.让原型图发挥最大作用.

    下面一张被侮辱过后的原型图


    原型图

    ✔ 代表前端此页面已完成,并在下方标注模板页面名称(如订单十几个长相差不多的页面,项目总计180+个页面,不标注根本分不清楚)
    ▲ 代表美工已审阅前端做出页面
    ⭐代表程序已经开发完此页面
    在此页面上测试人员也可以做出一种标记,不会出现漏测页面情况.

    3.与前端沟通交流(插件)

    • 项目开始初:大体总结出页面什么地方需要插件,插件的作用.
    • 项目开始中:程序给你什么数据(前端要什么数据) + 程序拿到什么数据(前端抛出来什么数据) 前端适当的暴露给程序接口.
    下面我要举栗子了:

    需求:项目需要显示地图可视范围内的任务,顶部是筛选插件(工种,时间段,关键词)

    • 前期
      程序会给前端 工种
      程序需要得到 工种,时间段,关键词
      程序需要json对象格式
    • 开发中
      发现在app中调用plus的地图会打开一个新的webview,使用css的z-index是无效的
      所以需要在插件展开和折叠触发回调(callbackSlideDown、callbackSlideUp)使地图hide和show
    • 开发后
      上帝想在点击遮罩层的时候折叠插件,和前端沟通好后不需要改模板任何代码.只需要在点击遮罩折叠触发callbackSlideUp即可
    • 总结
      在写插件时候,尽量保持让每个方法处理单独的逻辑(一个方法或函数仅有一个职责).这样使前期的开发和后期的维护更方便.


      插件
      任务筛选插件主要代码
    选择管理人插件

    二、技术层面

    1. Plus地图

    上述插件主要逻辑

    • 定义地图全局变量
    • 搜索局部变量
    • 存在地图 && 销毁存在的地图
    • 生成地图
    • 设置中心点
    • 拿到数据数据设置点(覆盖物)
    • 地图改变(onstatuschanged) 重新设置点(覆盖物)

    2.Elasticsearch(es)在实际项目中的应用

    es中的排序

    上述需求如果只是根据距离排序,那么只需要使用sort就可以完成.
    但是如果按照评分和最近发布来排序应该怎么处理?
    如何拿到距离?

    • 修改前


      es中根据geo排序
    • 修改后


      es中自定义脚本

      使用自定义脚本后可以使sort更加灵活.根据前端传的排序规则拼装es查询语句.

    组合查询例子:

    Array
    (
        [query] => Array
            (
                [bool] => Array
                    (
                        [must] => Array
                            (
                                [0] => Array
                                    (
                                        [term] => Array
                                            (
                                                [city_id] => 76
                                            )
    
                                    )
    
                                [1] => Array
                                    (
                                        [term] => Array
                                            (
                                                [type] => 2
                                            )
    
                                    )
    
                                [2] => Array
                                    (
                                        [multi_match] => Array
                                            (
                                                [query] => 李
                                                [fields] => Array
                                                    (
                                                        [0] => name
                                                        [1] => contact_tel
                                                    )
    
                                            )
    
                                    )
    
                                [3] => Array
                                    (
                                        [term] => Array
                                            (
                                                [area] => 锡山区
                                            )
    
                                    )
    
                                [4] => Array
                                    (
                                        [terms] => Array
                                            (
                                                [worktype] => Illuminate\Support\Collection Object
                                                    (
                                                        [items:protected] => Array
                                                            (
                                                                [0] => 吊顶隔墙
                                                                [1] => 装门
                                                                [2] => 定制家具
                                                            )
    
                                                    )
    
                                            )
    
                                    )
    
                                [5] => Array
                                    (
                                        [range] => Array
                                            (
                                                [workyear] => Array
                                                    (
                                                        [lte] => 2013
                                                    )
    
                                            )
    
                                    )
    
                                [6] => Array
                                    (
                                        [terms] => Array
                                            (
                                                [tag] => Array
                                                    (
                                                        [0] => 系统认证
                                                        [1] => 掌柜认证
                                                        [2] => 已购保险
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                        [must_not] => Array
                            (
                                [0] => Array
                                    (
                                        [terms] => Array
                                            (
                                                [busydate] => Array
                                                    (
                                                        [0] => 20180730
                                                        [1] => 20180731
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
        [_source] => Array
            (
            )
    
        [script_fields] => Array
            (
                [geo] => Array
                    (
                        [script] => doc['geo'].arcDistance(31.589228,120.342128)*0.001
                    )
    
            )
    
        [sort] => Array
            (
                [send_score] => Array
                    (
                        [order] => desc
                    )
    
            )
    
    )
    

    相关文章

      网友评论

      本文标题:某装修平台项目技术总结

      本文链接:https://www.haomeiwen.com/subject/gwyvmftx.html