我试图以更好的方式组织我的职能和班级。目前,我有以下的初级班(注:所有这些类有很多的性质和功能,但对于澄清起见,我把它们洗干净所有的距离):为我的C#项目提供更好的班级组织
internal class Class0{ }
internal class Class1: Class0 { }
internal class Class2: Class1
{
List<Class1> mainDataStructure;
}
我上面提到的类的组织非常好,但我主要关注的是下课。
public class Class3: Class2
{
InsertClass anInstance = new InsertClass();
public void Insert(Item item)
{
anInstance.mainDataStructure = mainDataStructure;
anInstance.Insert(item);
}
}
internal class InsertClass
{
List<Class1> mainDataStructure;
internal void Insert(Item item)
{
// adds item to mainDataStructure.
// some clean-ups using following function
// how to clean-up ? User will define it.
CleanUp();
}
// a function that use should implement
// define it as:
internal abstract string CleanUp();
// or as:
internal Func<string> CleanUp();
}
所以,当你发现,我的问题出现了,当我试图定义一些类(例如,Class4
)操纵我的mainDataStructure
。我所能做的(就像我在这里所做的那样)是将mainDataStructure
传递给操纵它的类。虽然它有效,但对我来说它看起来并不高雅。我想知道是否有可能以更好的方式重组我的Class3
和Class4
。
此外,操纵mainDataStructure
(例如Class4
)的类有一些功能,应由最终用户定义......我完全停留在那里!如果我将函数定义为abstract
,则用户必须继承该类并在子类中定义abstract
函数,或者如果我使用委托人Func<>
定义它们,则用户必须通过函数定义。这些解决方案的主要关注点是该课程的可达性水平!我高度赞同公众只有Class3
。因此,继承是没有问题的,对于委托,新组织应该有一种方法将功能定义从Class3
传递到Class4
。
我很感谢这个项目组织的任何帮助。
分类解释
该项目是一个信息检索项目。 mainDataStructure
存储信息。 Class3
是有点用户界面。用户通过获取这个类的一个实例来开始交互;并且通过该实例做所有事情(例如,添加新的信息,检索,统计等)。 Class4
向mainDataStructure
添加新信息。 Class5
检索存储信息之间的某种相似性。 Class6
得到一些mainDataStructure
(例如,右尾概率) 等的统计数据等等。
例:增加一个新的信息项 使用Class3
的实例,并调用public void Add(Item item)
。然后该方法将使用Class4
的实例和它的internal void Add(Item item)
方法来处理所有新项目插入过程。参见修改的上述代码
您的示例代码不能帮助我理解您的问题,我不完全明白您要完成的任务。据我所知,你没有通过数据结构。看来你正在设置一个属性,然后调用一个函数来执行某些操作?尝试阅读关于依赖注入,控制反转和纯函数/关注分离的内容。 – AlexanderBrevig 2014-09-01 06:06:54
这是有点意见我认为,但你的问题不太清楚。想到的两件事是接口而不是抽象,还有一些依赖注入,所以你可以将你想要的东西传递给类。 – Noctis 2014-09-01 06:08:19
代码组织和设计模式中的例子几乎从来没有ABC XYZ foobar,但从汽车,自行车,员工,客户等方面来看,我从comp sci课程中学到了经验。 – 2014-09-01 06:15:53