在哪里提供验证的逻辑规则

时间:2012-08-26 10:45:29

标签: oop design-patterns

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

现在,在哪里可以保留这种逻辑的规则,以便负责创建csv的类是通用的,并且与任何业务逻辑分离,如果业务需要改变,那么导出的类就不需要修改。

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

  • 课堂内的硬编码规则
  • 要传递给构造函数的规则

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

2 个答案:

答案 0 :(得分:0)

照往常一样......

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

如果没有密封,你可以将依赖关系注入其中。

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();

基本上可能性是无穷无尽的,它只取决于您想要关闭的内容以及您希望将来延伸的内容

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

答案 1 :(得分:0)

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