首页 > 解决方案 > C# 更改现有类 - 最佳实践开放/封闭原则

问题描述

我正在尝试找出更改现有课程的最佳方法。所以这个类叫做 ExcelReport,它有一个方法 Create(data,headings)。这是现场直播并在许多地方使用。现在最近我想改变方法,这样我就可以在 excel 中格式化列。创建(数据、标题、列格式)

为了不打乱我现有的程序,我能想到的最好的方法是在类中添加另一个方法 Create2(data,headings,columnformats)。

好的,我收到很多建议说我应该使用重载方法修改现有类,我这样做了。但这是否不违反打开/关闭原则,因为我现有的课程正在生产中。我是否应该使用新的改进方法创建一个新类 ExcelReport2(和接口)并使用依赖注入将其传递到我的新程序中?

问候,尼尔

标签: c#oopdesign-patterns

解决方案


正如评论所暗示的,最好的方法可能是使用重载方法。在大多数情况下,如果可能,我会考虑将重载方法实现为传递的想法。

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)


推荐阅读