c# - C# 更改现有类 - 最佳实践开放/封闭原则
问题描述
我正在尝试找出更改现有课程的最佳方法。所以这个类叫做 ExcelReport,它有一个方法 Create(data,headings)。这是现场直播并在许多地方使用。现在最近我想改变方法,这样我就可以在 excel 中格式化列。创建(数据、标题、列格式)
为了不打乱我现有的程序,我能想到的最好的方法是在类中添加另一个方法 Create2(data,headings,columnformats)。
好的,我收到很多建议说我应该使用重载方法修改现有类,我这样做了。但这是否不违反打开/关闭原则,因为我现有的课程正在生产中。我是否应该使用新的改进方法创建一个新类 ExcelReport2(和接口)并使用依赖注入将其传递到我的新程序中?
问候,尼尔
解决方案
正如评论所暗示的,最好的方法可能是使用重载方法。在大多数情况下,如果可能,我会考虑将重载方法实现为传递的想法。
Create(data, headings, columnformats)
将使用列格式转换数据并调用:
Create(data,headings)
在方法结束时。这意味着在 Create 方法的所有情况下,都使用 2 个参数调用版本,而需要 3 个参数的情况则作为传递处理。如果将来需要维护代码,这将保持干扰最小的规则并避免混淆,因为您没有在以下位置复制逻辑:
Create(data,headings)
编辑:这种方法的一个重要考虑因素是,如果columnformats
不修改数据或标题,您可能无法按照概述实际使用它。在这种情况下,您将使用作为该函数的传递Create(data, headings, columnformats)
的基本方法。Create(data,headings)
在这种情况下Create(data,headings)
,将设置一个默认值,然后将其传递给Create(data, headings, columnformats)
推荐阅读
- ios - 当键盘在 Swift 中使用自动布局显示时,保持 TableView 的底部可见
- java - RecyclerView 正在填充我列表中的最后一个元素
- reactjs - 在 ReactJs 上选择和存储 DIV
- android - 无法在 Android Kotlin 中获取 AWS DynamoDB 的列表列
- flutter - 如何在一个信号通知点击颤振上打开特定页面?
- python - TensorFlow多GPU代码中“塔损失”的目的是什么?
- r - 从R将数据插入雪花表
- python - 如何使用一系列数字进行while循环
- python - 当代码具有 raw_input 时,Python 代码输出重定向到文件
- codenameone - 输入无响应 (cn1)