我目前正在努力理解我应该如何组织/构建我已经创建的类。该类执行以下操作:
- 作为构造函数中的输入,它需要一组日志
- 在构造函数中,它通过一系列实现我的业务逻辑的算法来验证和过滤日志
- 在完成所有过滤和验证后,它会返回有效和过滤日志的集合(列表),这些日志可以在 UI 中以图形方式呈现给用户。
这是一些描述我正在做的事情的简化代码:
class FilteredCollection
{
public FilteredCollection( SpecialArray<MyLog> myLog)
{
// validate inputs
// filter and validate logs in collection
// in end, FilteredLogs is ready for access
}
Public List<MyLog> FilteredLogs{ get; private set;}
}
但是,为了访问此集合,我必须执行以下操作:
var filteredCollection = new FilteredCollection( specialArrayInput );
//Example of accessing data
filteredCollection.FilteredLogs[5].MyLogData;
其他关键输入:
- 我预见应用程序中只存在这些过滤集合中的一个(因此我应该将其设为静态类吗?或者可能是单例?)
- 创建对象的可测试性和灵活性很重要(也许因此我应该将其保留为可测试的实例类?)
- 如果可能的话,我宁愿简化日志的取消引用,因为实际的变量名称很长,并且需要大约 60-80 个字符才能获取实际数据。
- 我试图保持这个类简单是这个类的唯一目的是创建这个经过验证的数据集合。
我知道这里可能没有“完美”的解决方案,但我真的很想通过这种设计来提高我的技能,我非常感谢这样做的建议。提前致谢。
编辑:
感谢所有回答者,Dynami Le-Savard 和 Heinzi 都确定了我最终使用的方法 - 扩展方法。我最终创建了一个 MyLogsFilter 静态类
namespace MyNamespace.BusinessLogic.Filtering
{
public static class MyLogsFilter
{
public static IList<MyLog> Filter(this SpecialArray<MyLog> array)
{
// filter and validate logs in collection
// in end, return filtered logs, as an enumerable
}
}
}
我可以通过这样做在代码中创建一个只读集合
IList<MyLog> filteredLogs = specialArrayInput.Filter();
ReadOnlyCollection<MyLog> readOnlyFilteredLogs = new ReadOnlyCollection<MyLog>(filteredLogs);