c# - 如何以更清洁的方式处理大型工厂

标签 c# design-patterns oop factory

我的开发团队遇到了设计问题。我希望有人可以帮助我稍微清理一下架构的这一部分。

在我的系统中,我有一个包含 250 个成员的枚举 [一个成员代表一个不同的下拉列表]。为了填充任何给定窗口的下拉菜单,该表单发送与所需下拉菜单相关的枚举成员,并返回下拉信息。

换句话说,例如,我们有 3 个窗口。窗口 A 有下拉 X、Y 和 Z。窗口 B 有下拉 W、X 和 Y,窗口 C 有下拉 T、U 和 W。我的 DropDownType 枚举将由 T、U、W、X、Y、Y 组成, 和 Z。因此,对于指定的窗口,给定该窗口上的下拉菜单,我查询要显示在这些下拉菜单中的数据。

这是一个简化的示例,因为我的应用程序包含 > 250 个不同的下拉菜单。

如您所想,我有一个出厂设置来返回每个下拉列表的数据。每个下拉请求都会调用这个工厂。

    switch (dropDownType)
    {
        case DropDownType.T:
            return (from t in dataContext.GetTable<TableOne>() 
                    select new DropDownDto 
                               { 
                                   DropDownDisplayName = t.ColumnA,
                                   DropDownValue = t.ColumnB
                               }).ToList();
        case DropDownType.U:
            return (from u in dataContext.GetTable<TableTwo>() 
                    select new DropDownDto 
                               { 
                                   DropDownDisplayName = u.ColumnC,
                                   DropDownValue = u.ColumnD
                               }).ToList();
        // etc...
    }

因为我在这个枚举中有这么多成员,有人知道更优雅的编码方式吗?您认为将其转换为工厂方法会有帮助吗(但那样我们就不得不担心我们的源代码中有 250 个单独的文件……)?还有其他更有用的模式吗?仅仅拥有这个巨大的 switch 语句就变得难以管理了。

非常感谢任何帮助。提前致谢!

最佳答案

您可以创建一个 Dictionary<DropDownType, DropDownDtoDelegate>每个条目都包含一个枚举条目作为键和一个委托(delegate)来检索下拉数据作为值。这将允许您将每个返回下拉列表的方法分开,并从巨大的 switch 语句中分离出来。然后,您将有一种方法来检索委托(delegate)、执行它并返回下拉列表数据。

关于c# - 如何以更清洁的方式处理大型工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/664440/

相关文章:

c# - 一些第三方工具的 Javascript 和 CSS 文件压缩技术

c# - TempData 在 ASP.Net Core 2.1 MVC 中始终为 Null

java - 找到位于这些元素之间距离最小的位置

ios colorWithPatternImage,图案的大小

php - 使用 for 循环访问类变量

c# - RegisterWithContext 与生活方式不匹配

c# - JavaScriptSerializer - 枚举的 JSON 序列化为字符串

php - 一个 SQL 查询,还是一个循环中的多个?

vba - 通过构造进行 VBA 继承的后续操作,构造函数不起作用?

Javascript 伪类、jQuery 事件处理程序和 'this'