语言最好是C#, C++也行, 只是相信从语法角度来说C++不会比C#强.我在考虑怎样设计很大量的对象的关系, 注意是很大量, 而且have-a关系的层次很深, 10层左右.具体的, 我有个对象A, A对象内有A_A, A_B, A_C...... A_A中有A_A_A, A_A_B..... 以此形成树形结构, 有终点, 但可能很深, 需要达到的实现要求, 主要有几点:1. 在使用的过程中, 要能够用点号. 直接串联下去, 如A . A_A . A_A_B . A_A_B_D . ...... 最后调用相关函数, 如A . A_A . A_A_B . A_A_B_D . GetPrcs().2.这些很大量的对象可能属于20个左右的class, 但即使是同一类的对象, 他们的也可能含有各自独特的方法, 我希望各个对象都有能力扩充自己的函数, 但是不希望出现更多的class, 这点好像很难做到.... 关键是我不希望为每一个有特殊方法的对象定义一个class.3. 源代码的最好能反应出这些对象之间的层次结构性.我考虑到两种方式, 一个是嵌套类,问题是层次太深, 10层嵌套类下去会很恐怖, 还一种就是在统一文件域定义好所有对象, 然后用tree把他们组织起来, 但是这样做使得不同层次的对象在源代码上处于同一域内, 没有很好的表现出层次性.大家各抒己见,
interface ISpecializedLeaf
{
void SpecialFunc();
} abstract class Leaf : ISpecializedLeaf
{ #region ISpecializedLeaf Members public void SpecialFunc()
{
//Implement function
//throw new NotImplementedException();
} #endregion
}
直接继承接口或抽象类来实现你各种不同的Leaves,然后把所有Leaves按照次序组合起来!
return new Beta().getGamma().getDelta().getEpsilon().getOmega().getThing(id);
}这段代码有很多“味道”,比如:消息链:要得到结果的调用有六层之深。
不当的亲密关系:客户必须知道其他类的内部结构才能得到结果。
不当的暴露:beta、gamma、delta等等方法允许了不当的暴露关系,才能得到第三个对象 。so,我不觉得这是很好的设计,我宁愿把他们拆散,用namespace去划定,而不是class套class
像lz要求的这类树状体系,完全可以这么玩
1。一个IHierarchicalDataSource接口
2。一个基于IHierarchicalDataSource和CollectionBase,IEnumerable<T>的管理类
3。一套便于查找操作层级数据的扩展方法
2. CollectionBase,IEnumerable<T>两者都需要? 作用分别是什么呢?
3. 对于这个层级遍历的方法, 我考虑我目前和将来都只需要做到一点, 就是对于树中每一个节点, 都必须能够快速获取父节点, 所以可能会在节点中直接保存父节点ref, 并且能够获取直接下级的子节点便足够了, 不会出现随机访问树中任意节点的情况请ls的多谈下, 欢迎更多的同学参加谈论, 看有没有更美丽的设计
{
void someMothed();
}class Container : IContainer
{
private List<IContainer> m_List;
void someMothed()
{
custom code ...
foreach(IContainer item in m_List)
{
item.someMothed();
}
}
}