我正在努力改进我使用类和对象的策略。
通过一系列特定类传递对象以保持代码组织的最佳方法是什么。
示例:使用ZedGraph对象(注释)这可能不是最好的例子,但它可以解决这个问题。
class Graphhandler
{
private ZedGraphControl ZGC;
private SubGraphController PortionofGraph;
public class GraphHandler(ZedGraphControl _ZGC)
{
ZGC = _ZGC;
initializeGraph();
}
private void initializeGraph()
{
// notice I am putting the ZGC Object into another class
// and likely that ZGC object will go into another class
PortionofGraph = new SubGraphController(ZGC);
}
}
class SubGraphController
{
private ZedGraphControl ZGC;
private DeeperSubGraphController PortionofGraph;
public class SubGraphController(ZedGraphControl _ZGC)
{
ZGC = _ZGC;
initializeSubGraph();
}
private void initializeSubGraph()
{
PortionofGraph = new DeeperSubGraphController(ZGC);
// is there a better way?
}
}
是否有更好的方法将yop级别对象传递给所有这些调用以操纵数据?
答案 0 :(得分:3)
通常,答案是将完全形成的依赖项传递到对象中。例如:
public GraphHandler(SubGraphController portionOfGraph) {
this.portionOfGraph = portionOfGraph;
}
public SubGraphController(DeeperSubGraphController portionOfGraph) {
this.portionOfGraph = portionOfGraph;
}
...
var zedGraphControl = new ZedGraphControl();
var deeperSubGraphController = new DeeperSubGraphController(zedGraphControl);
var subGraphController = new SubGraphController(deeperSubGraphController);
var graphHandler = new GraphHandler(subGraphController);
而不是直接在子图控制器中构造DeeperSubGraphController
。如今,您通常使用依赖注入框架来协调所有这些。
答案 1 :(得分:1)
您可以查看Inversion Of Control(经常被忽略的IoC)。
它基本上是一个超级对象,可以让您随时随地访问其他对象。
答案 2 :(得分:0)
您可以尝试在此方案中使用继承。
答案 3 :(得分:0)
不同的控制器如何控制图形。通常,对象以您完成的方式传递 - 作为方法参数。如果一个对象需要/使用另一个对象(因为控制器控制你的情况下的图形)跨越不同的方法,那么它们被声明为该引用对象的成员,就像你所做的那样。如果单个方法需要它们,则将它们作为参数传递给对象的特定方法。
如果有一个更复杂的方案来控制特定顺序的图形,您可能需要查看chain of responsibility模式。