本人用简单工厂模式处理了对应的业务的config配置,这样可以实现业务代码和配置代码分离,而config使用工厂模式具有良好的可扩展性
1.建立工厂class
import os
import web
from vendor.config.mirna import Mirna
#===============================================================================
# -*- coding: utf-8 -*-
# config工厂
#author:
#===============================================================================
class configFactory(object):
def __init__(self):
pass
'''
* 配置
*
* @param string
*
* @return dict
*
'''
@classmethod
def getMethod(self, type):
try:
params = {
'mirna':Mirna(),
}
keys = params.keys()
if not type in keys:
raise Exception('config没有配置')
return params[type].config()
except Exception as e:
raise Exception(str(e))
@classmethod
def config(self, type):
return self.getMethod(type)
说明:由于config的业务相对比较简单,所以直接使用了静态对象的调用
2.具体config的实现
import os
import web
from vendor.config.base import Base
#===============================================================================
# -*- coding: utf-8 -*-
# mirna config文件
#author:
#===============================================================================
class Mirna(Base):
def __init__(self):
pass
'''
* 配置
*
* @param string
*
* @return dict
*
'''
@classmethod
def config(self):
config = {
'operators': {
'<': '$lt',
'>': '$gt',
}
}
base_config = Base.baseConfig()
new_config = {}
new_config.update(base_config)
new_config.update(config)
return new_config
备注:改类还继承了一个父类,用于把公用的配置放到父类里面
3.配置父类的代码:
import os
import web
#===============================================================================
# -*- coding: utf-8 -*-
# base config文件
#author:
#===============================================================================
class Base(object):
def __init__(self):
pass
'''
* 配置
*
* @param string
*
* @return dict
*
'''
@classmethod
def baseConfig(self):
return {
'operators': {
'<': '$lt',
'>': '$gt',
}
}
~
以上就是简单工厂模式的实现,基于封装的框架是webpy
调用测试:
from vendor.config.configFactory import configFactory
config = configFactory.config('mirna')