我有一个识别页面坐标的函数,我将它们作为一个返回
Dictionary> GetDocumentCoordinates(int DocumentId)
但是,稍后我需要有关每个页面的信息 - 如果它已经过验证,页面分辨率是什么,颜色/ bw等等.我可以创建另一个函数并运行与前一个函数几乎相同的结果集并获取该信息.
DictionaryGetDocumentAttributes(int DocumentId)
另一种方法是添加一个ref
参数,这样我就可以获得这些值.
Dictionary> GetCoordinates(int DocumentId, ref Dictionary PageAttributes)
另一种方法是创建一个包含字典和页面信息的包含类:
class DocumentInfo { Dictionary> Coordinates { get; set;} Dictionary PageAttributes { get; set; } }
然后定义:
DocumentInfo GetDocumentInfo(int DocumentId);
我倾向于最后一个选项,但你的见解非常感谢.
最后一个选项绝对是最好的选择.我发现,在获取或返回具有多种含义的复杂数据时,创建一个复杂类型来封装这些数据是出于多种原因的最佳实践.
首先,您的返回数据可能会随着设计的变化而变化.将此数据封装在对象中允许您更改它携带的内容以及您的方法如何对此数据进行操作,而无需更改对象的接口.显然,您的数据对象不应该实现接口; 最多,有一个具有最小接口的基类,然后将引用传递给基础.
其次,您可能会发现您的数据变得复杂到需要对其进行验证的程度.您可以轻松地将其包含在数据类中,而不是在您处理此数据的类的所有方法中进行此验证.单一责任等