开发者社区> 问答> 正文

在继承似乎不合适的情况下,我将使用哪种设计模式将一个用户选择传递给所有类?

我正在构建一个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

展开
收起
is大龙 2020-03-24 17:51:41 508 0
1 条回答
写回答
取消 提交回答
  • 对于在各处使用的变量以及应用程序的生命周期,我看到两种可以完成任务的方式。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

    2020-03-24 17:51:50
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
继承与功能组合 立即下载
当泛型遇上协议 立即下载
JAVA反射原理以及一些常见的应用 立即下载