我有一个文件导出器,并将字段类型验证为字符串,日期等,以及每行的字段数。
现在,在哪里可以保留这种逻辑的规则,以便负责创建csv的类是通用的,并且与任何业务逻辑分离,如果业务需要改变,那么导出的类就不需要修改。
我曾经创建了一个用于业务逻辑的第二个类,但这需要以下内容 - 我认为同样糟糕:
似乎没有一个好的解决方案,但这一定是一个常见的问题?
答案 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。每个组件都有自己的验证标准,但是通过其通用接口将其用于客户端的黑盒子。因此,当您构建系统时,您实例化您的客户端并注入您需要的验证器。