Python的一道题以及我的代码,求大神看看有什么可以改进的地方

如题所述

这个没有最佳解法吧,看个人理解……
下面是我的理解:
1. 不同的策略分为不同的类,提供一个统一的接口,比如
#strategy.py
class UserRate(object):
def __init__(self, comment_per_user_min=10):
#init

def check(self, userdata):
#检查用户数据,超过限制即报警

class UserDupContent(object):
def __init__(self, content_send_per_user=10):
#init

def check(self, userdata):
#检查用户数据

2. 使用依赖注入将策略注入到检查程序:
class Guarder(object):
def addStrategy(self, strategy):
#添加一个策略

def check(self, userdata):
#使用已经添加的策略逐个检查
#返回检查结果

def reload_from(self, conf):
#解析配置并创建相应对象
self.addStrategy(strategy)

@classmethod
def create(cls, conf=''):
obj = cls()
if conf:
obj.reload_from(conf)

3. 调用Guarder实例检查
guarder=Guarder.create('antispam.ini')

def index():
if guarder.check(userdata):
pass
else:
#error

def admin_reload_guarder():
'''根据web请求运行时重载配置'''
import strategy
reload(strategy)
guarder.reload(conf)

示例配置文件:
#antispam.ini
[strategies]
inst=usercontent,userrate

[usercontent]
type=strategy.UserDupContent
init.comment_per_user_min=5

[userrate]
type=strategy.UserRate
init.content_send_per_user=5

以上能够完成的功能如下:
1. 隔离了策略代码,使用依赖注入的方式完成
2. 策略本身是duck typing,灵活扩充
3. 策略代码文件strategy.py不停止服务器热部署
当然,配置文件可以调整格式,直接用python代码写都可以
温馨提示:答案为网友推荐,仅供参考
相似回答