首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接Ui信息和域信息

如何连接Ui信息和域信息
EN

Stack Overflow用户
提问于 2017-03-19 00:03:25
回答 1查看 78关注 0票数 0

比如说,我正在用用户界面制作一个游戏,我想让某些人在画布上画出来,比如说,用上面的矩形来表示他们,一个文本框,上面写着这个人的名字。纯粹从领域的角度来看,我的人有一个名字。如果需要,可以在以后添加特定的域-逻辑。

代码语言:javascript
复制
public class Person{
  private String name;
  //Constructor and methods
}

我还需要跟踪有关这个人的Ui信息,所以我决定创建一个独立的类来完成这个任务。

代码语言:javascript
复制
public Class PersonUi {
  private int x;
  private int y;
  private int length;
  private int width;

  //Constructor and methods
}

现在,我在不同的类中拥有Ui和域数据。比如说,当我点击某个人时,我想知道这个人的名字。我可以链接正确的PersonUi对象,但是我如何知道这个人的名字?如何以面向对象的方式链接Ui和域数据?

下面的选项是如何考虑良好的面向对象设计的?

1)在另一个类中保存列表,并使用列表的顺序来知道哪个ui对象属于哪个域对象

2)使用Map映射这两个类

3)使用包装类对这两个类进行包装。

或者只在一个类中定义上一个示例中的所有数据可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-20 06:03:16

通常,通过在UI和域之间设置一个服务/api层来解决这个问题。您可以将您的person ID (例如GUID)存储在personUI中。然后,在UI类中,您可以拥有:

代码语言:javascript
复制
public class PersonUi
{
    private Guid personId; // Or UUID for java
    private IPersonService personService;

    ...

    nameTextBox.text = personService.getPersonName(personId);
}

这样,您就不会从UI端直接链接到您的域。所有用例都必须通过服务引导。

当然,也可以使用此服务来更改域。

为了测试设计的完整性,您可以将域放在不同的包/项目中,并将其作为UI层的依赖项完全删除。UI层可以引用可以引用域层的服务层。

要将对域所做的更改传递给UI,您可能需要查看事件系统。如果一个输入组件接收到更改域的输入,并且这些更改必须传播到其他几个UI组件,那么事件可能是最好的方法。只需确保在事件args中提供最小数量的信息,而不是实际的域实体,因为这将使您回到您最初关心的UI和域耦合问题。

UI组件的最终代码可能如下所示(请原谅我肮脏的C#约定):

代码语言:javascript
复制
public class PersonUi implements IPersonNameChangeListener
{
    private Guid personId; // Or UUID for java
    private IPersonService personService;

    ...

    public void userEnteredANewNameThroughUI(String newName)
    {
        personService.setName(personId, newName);
    }

    @Override
    public void onPersonNameChange(Guid personId, String newName)
    {
        if(this.personId != personId)
             return;

        nameTextBox.text = newName;
    }
}

在最后一个代码示例中,您将注意到输入不会直接影响输出。相反,更改会冒泡到您的域,并通过事件返回到您的UI层。这意味着您的输入和输出组件现在也是独立的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42881351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档