3

我有一块板,板上有移动的瓷砖。很简单,我的模型将有一个 Board 类和一个 Tile 类什么是 POCO 和 Board“有”瓷砖(Board 有一个 IList <Tile>)

我有一个 UI(Unity3d 行为)说 BoardBehaviour“有一个”板。但这里开始我的问题。我也有“有”瓷砖的 TileBehaviour UI 对象。这似乎是多余的,因为:

  • BoardBehaviour 有一个有 Tiles 的 Board。
  • BoardBehaviour 有 TileBehaviours (IList<TileBehaviours>) 并且每个 TileBehaviour 都有一个 Tile。

我有一点疑惑...

任何想法如何连接模型和实际的 UI 类?

4

4 回答 4

1

可能 BoardBehaviour 和 TileBehaviour 是不好的类。我们来分析一下目前的情况。BoardBehaviour 有董事会。这很奇怪。事实上,董事会应该有行为。这就是为什么我可以建议创建基类 BehaviourItem,它将具有所有行为功能。Board 和 Tile 应该继承自 BehaviourItem。这应该可以解决一些复杂性问题。

于 2013-06-06T15:00:43.417 回答
1

是一种关系:从基类继承时,派生类是基类;即汽车是车辆;

有关系:当你说类有东西(组成)时,即汽车有引擎。发动机是汽车的一部分。

所以这里移动瓷砖是棋盘的一部分。所以董事会“有一个”瓷砖。

当您实现行为(继承属性)时,它的“是”关系。没有冗余。

 BoardBehaviour "has a" Board.

董事会有董事会行为。

Board 类实现了 BoardBehaviour。Tile 类实现了 TileBehaviour。Board 类在 Tile 中的内部类(如果需要 Tile 作为单独的类,您可以在 Board 中创建新的 Tile 对象)。

于 2013-06-02T14:16:48.303 回答
0

有个

一块板有瓷砖。BoardBehavior 有 TileBehaviors

这是一个理论上的构造函数:

BoardBehavior(Board board, ...)
{
    this.m_tileBehavoirs = board.Tiles
        .Select(tile => new TileBehavior(tile, ...)).ToList();
}
于 2013-06-02T14:27:13.483 回答
0

我会建议这样的事情:你应该有两个接口 1. BoardBehavior 2. TilesBehavior。分别在 Class Board 和 Tiles 中实现它们。现在,Board 应该有 Tiles 列表。这个问题可以通过关联或组合来解决。我建议你应该协会。这意味着在您的 Board 类中可以参考仅实现 TilesBehavior 的 Tiles 列表。我希望我在这里听起来不太复杂。如果我是,请告诉我,我将提供此方法的代码以使其更清晰。

于 2015-06-11T13:24:18.110 回答