博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序扩展性的一个实例(上)
阅读量:5083 次
发布时间:2019-06-13

本文共 1271 字,大约阅读时间需要 4 分钟。

这段时间用python写了很多report脚本,当时没考虑那么多,思路清楚后就开始写了。

但是后面需要对某些report进行扩展时,发现问题就出来了,改动的地方太多,而且容易出错。

看了一些设计模式,发现没找到我想要的。手头现在又有一个report需求,打算尽量将代码写的易扩展些。

问题描述

给出report,返回不正常的账户

不正常的规则很多,后续会扩展,判断是否符合某个规则需要搜集某些数据。

不同规则判断所依赖的数据可能来自同一个地方,即具有一定的重复性。

一个账户满足的不正常规则可能会很多,故每个规则判断具有一定的优先级。

目标是搜集满足不同规则下的账户信息及具体违规数据,并注重扩展性。要求用python实现,输出csv文件。

如下图所示:

扩展性的体现:增加新功能不需要修改已有的代码,只增加代码(没有任何重复的代码)。

这个问题中,以后主要的扩展方向就是规则和数据。

1.规则的优先级

我首先想到的是树,但是实现起来比较复杂,python貌似没有现成的树结构

优先级的引入主要是为了避免不必要的规则判断。

先用list嵌套list的方式实现吧。记作rule_relation

2.规则判断程序

加入一个规则rule_i,就会加入一个判断是否符合该规则的程序judge_rule_i。

这些不同的判断程序以何种方式组织是一个问题。如何与rule_relation结合又是一个问题。

还是用对象好,一个rule是一个对象,里面有树结点信息存储rule_relation。又有judge_rule这个抽象方法。

一个规则的引入就继承rule基类。然后实现方法judge_rule。前面两个问题都迎刃而解了。

3.判断不同规则可能需要不同的数据

这个也可以用rule对象解决,init里初始化好数据,需要相同数据就互相继承,面向对象真好

4.结果收集

整理下整体的思路。

初始化rule_relation,扩展的话,需要新建一个类。然后在rule_relation 里多插入一个结点。

遍历账户list,依照rule_relation的根结点依次进行judge_rule。

rule_relaton遍历实现起来好像也不轻松,子结点还是用对象list好。孩子结点可以多个。

一旦符合某个规则,就跳出执行下一个账户。

结果需要先打印规则信息,然后打印满足这个规则的所有账户及具体信息。

直接想法是 维护多个规则list,然后append,遍历输出。

那不是多一个规则就要多加一个list,不好不好。

如果只有一个list,那么需要排序,过度数据时需要打印规则信息。

可以将list 当作参数输入到judge_rule里,judge_rule将结果包括排序key append到list里

遍历,然后判断当前key和上一个是否一致,不一致则print规则信息

整体思路就是这样,有想法大家一起讨论

转载于:https://www.cnblogs.com/2010Freeze/archive/2012/11/14/2770384.html

你可能感兴趣的文章
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
jQuery.form.js使用
查看>>
(转)linux sort,uniq,cut,wc命令详解
查看>>
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>
UVa540 Team Queue(队列queue)
查看>>