我正在构建一个Python应用程序,该应用程序计算销售量,可用库存和所需零件,首先要求用户从组合框中选择其部门。
我应该使用哪种设计来最好地通知应用程序内的所有班级选择部门?一旦选择了部门,它将在整个应用程序中以及整个应用程序实例的生命周期中保持使用。
class Sales:
def __init__(self, departmentname):
self.departmentname = departmentname
self.conn = pyodbc.connect(jsonhandler.get_json('connections.json'))
def calculate_sales(self):
with self.conn:
departmentsalesvalues = pd.read_sql_query(f"""SELECT productcode, quantity, salesprice
FROM salestable
WHERE department = ?""", self.conn,
params=(self.departmentname))
return departmentsalesvalues
这可行,但看起来笨拙/设计不佳。我相信我缺少在所有编程语言中都有用的概念/模式。有人可以指出我正确的方向吗?
我问自己的问题:我应该创建一个系类吗?但是由于该部门在任何方面都不与其他类相似,因此继承似乎是不可能的。我应该在Main / App类中传递这些信息吗?(我目前正在做什么。)我是否应该有一个与Main / App类接口的“ orchestrator”类?
我对构建可伸缩的应用程序很陌生,但是我发现这种设计问题在我的项目中越来越多地发生。
问题来源:stackoverflow
对于在各处使用的变量以及应用程序的生命周期,我看到两种可以完成任务的方式。A)创建一个全局变量(我知道.. globals变量是不好的。但是对于这种特殊情况,当您需要的只是部门,并且您到处都需要它时,全局变量比重写所有类以接受构造函数要好B)创建一个“ Context”类,将部门选择作为变量。调用它们时,上下文项将传递给您的所有函数,并且您可以根据需要向上下文类添加更多信息。
对于可伸缩的应用程序,您可以将此信息存储在“配置”文件或数据库的特殊表中。然后,您将拥有上下文和中间件。
上下文是传递给所有业务功能的词典。
中间件是以某种方式更改上下文的类的列表。
您将具有一个名为“ UserChoices”的中间件类,该类具有以下功能:
def alterContext(context={}):
context["DepartmentChoice"] = readDBvalue()
return context
然后,您将获得这样的上下文
def getContext():
context ={}
for m in middlewares:
context = m(context)
return context
然后您可以像这样使用您的业务功能
def businessFunc(context):
return stuff
businessFunc(getContext())
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。