OOP从非相关类访问方法

时间:2016-07-04 15:12:08

标签: oop mvvm architecture

Hello Stackoverflowers,

我有5个班,Foo,Bar,Thud,Grunt,Zot。 Thud和Grunt实例是Bar的字段。 Foo实例是Thud的一个领域。

Foo,Thud和Grunt为View准备数据(MVVM模式,它们是视图模型)。 Foo和Zot是数据或创建它们(模型)

除此之外,Foo还生产了一些在Grunt中列出的Zot(从Bar中添加,从Thud访问Foo)。我需要Foo来获取Grunt中的Zot列表。如果可能的话,我想避免在Grunt或Bar类中完成所有工作(将序列化列表),因为它们不是模型。这个过程总是从Foo开始(当然可以添加新的类或东西)

public class Bar
{
  Thud thud;
  Grunt grunt;

  Bar(Zot zotInstance)
  {
    new thud();
    new grunt();
    grunt.zotlist.add(zotInstance);
  }
 }

public class Thud
{
  Foo foo;
}

public class Grunt
{
  list<Zot> zotList;
  public list<Zot> getList();
}
public class Foo
{
  public Zot makeZots() {};
  public void BringMeZots() // I would like a way to get the zotList when this method is called.
}

我不确定以最简单的方式解释它。告诉我是否需要另外解释我的问题。

1 个答案:

答案 0 :(得分:0)

因此,您需要一种方法来分享您正在创建的Grunt对象。

首先,您需要一种方法将其注入Foo类:

public class Foo
{
  Grunt grunt;

  public Foo(Grunt g)
  {
    grunt = g;
  }

  public Zot makeZots()
  {
  }

  public void BringMeZots()
  {
    List<Zot> hereAreSomeZots = grunt.getList();
  }
}

这意味着您还需要将其注入Thud课程:

public class Thud
{
  Foo foo;

  public Thud(Grunt g)
  {
    foo = new Foo(g);
  }
}

最后,您可以将此Grunt实例传递到Thud实例中:

public class Bar
{
  Thud thud;
  Grunt grunt;

  Bar(Zot zotInstance)
  {
    grunt = new Grunt();
    grunt.zotlist.add(zotInstance);
    thud = new Thud(grunt);
  }
}

你有相当抽象的类名,所以我很难分辨出每个人的实际行动,但正常情况下,当我看到需要传递依赖关系的时候,这表明整体设计存在问题。 / p>

你应该看一下依赖注入,因为这也会简化你的设计。