0

我有一个文件导出器,并将字段类型验证为字符串、日期等 + 每行的字段计数。

现在,将这种逻辑的规则保留在哪里,以便负责创建 csv 的类是通用的并且与任何业务逻辑解耦,并且如果业务需求发生变化,那么导出的类永远不需要修改。

我曾考虑创建用于业务逻辑的第二个类,但这需要以下内容 - 我认为两者同样糟糕:

  • 类内的硬编码规则
  • 传递给构造函数的规则

似乎没有一个很好的解决方案,但这一定是一个普遍的问题?

4

2 回答 2

0

像往常一样,这取决于..

数据的责任在于提供者。如上所述的“fileExporter”将导出文件,如果数据提供者被密封,那么显然您将创建一个验证器来断言数据,随后断言的数据将被传递给文件导出器。

如果它没有密封,您可以将依赖项注入其中。

IE

class DataProvider(IDataValidator dataValidator, IFileFormat fileFormat){...}
interface IFileFormat { void Export();}
interface IDataValidator { void AsserData(); }
class CSVDataValidator : IDataValidator{...}
class CSVFileExporter : IFileExporter {..}

var dataValidator = new CSVDataValidator();
var iFileFormat = new CSVFileFormat();
var dataProvider = new DataProvider(dataValidator, fileFormat);
var data = dataProvider.Data;
var csvFileExporter = new CSVFileExporter(data)
csvFileExporter.Export();

基本上可能性是无穷无尽的,这取决于你想关闭什么以及你希望在未来扩展什么

我会阅读策略/依赖注入/打开关闭原则

于 2012-08-26T12:11:39.730 回答
0

在我看来,您应该尝试使用责任链模式。如果作为参数传递的内容为“有效”,则您的客户端拥有一个验证器对象列表,每个验证器对象实现一个带有方法(即验证)的验证器接口,该方法返回真。每个组件都有自己的验证标准,但是对于通过其通用接口使用它的客户端来说,它是黑盒的。因此,当您构建系统时,您会实例化您的客户端并注入您需要的验证器。

于 2012-08-26T12:51:07.483 回答