我目前正在努力了解如何组织/构建我已经创建的类。类执行以下操作:对象设计:如何组织/构建“集合类”
- 作为其在构造函数输入,它通过一系列的算法需要记录的集合
- 在它验证构造函数和过滤日志实现我的业务逻辑
- 后所有过滤和验证都已完成,它会返回有效和过滤日志的集合(List),这些日志可以在用户界面中以图形方式呈现给用户。
下面是一些简单的代码描述我在做什么:
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乐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);
注意,来电者将能够创建后操作列表。最好不要公开FilteredLog,以确保其不变性。 – CurtainDog 2010-05-25 23:54:41