Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;是一个&引用;有一个;关系设计决策_C#_Design Patterns - Fatal编程技术网

C# &引用;是一个&引用;有一个;关系设计决策

C# &引用;是一个&引用;有一个;关系设计决策,c#,design-patterns,C#,Design Patterns,我有一块木板,木板上有活动的瓷砖。 很简单,我的模型将有一个Board类和一个Tile类,即POCO和Board“有”tiles(Board有一个IList) 我有一个UI(Unity3d行为)说BoardBehavior“有一个”板。但我的问题开始了。我还有TileBehaviour UI对象,它“有一个”Tile。这似乎是多余的,因为: BoardBehavior有一块有瓷砖的板 BoardBehavior有TileBehaviours(IList),每个TileBehavious都有一个

我有一块木板,木板上有活动的瓷砖。 很简单,我的模型将有一个Board类和一个Tile类,即POCO和Board“有”tiles(Board有一个IList)

我有一个UI(Unity3d行为)说BoardBehavior“有一个”板。但我的问题开始了。我还有TileBehaviour UI对象,它“有一个”Tile。这似乎是多余的,因为:

  • BoardBehavior有一块有瓷砖的板
  • BoardBehavior有TileBehaviours(IList),每个TileBehavious都有一个Tile
我有点困惑


有没有关于如何连接模型和实际UI类的想法?

是一种关系:当您从基类继承时,派生类就是基类;i、 e汽车是一种交通工具

有一种关系:当你说这个班级有某种东西(成分),即汽车有一个引擎。 发动机是汽车的一部分

所以这里移动的瓷砖是电路板的一部分。因此,董事会“有一个”瓷砖

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

 BoardBehaviour "has a" Board.
董事会有董事会行为

Board类实现BoardBehavior。 Tile类实现TileBehaviour。 平铺中Board类的内部类(如果需要将平铺作为单独的类,则可以在Board中创建新的平铺对象)。

具有

木板有瓷砖。董事会行为具有TileBehavior

这是一个理论构造器:

BoardBehavior(Board board, ...)
{
    this.m_tileBehavoirs = board.Tiles
        .Select(tile => new TileBehavior(tile, ...)).ToList();
}

也许,董事会行为和TileBehaviour是不好的课程。让我们分析一下目前的情况。董事会行为有董事会。这很奇怪。事实上,董事会应该有自己的行为。这就是为什么我可以建议创建基类BehaviorItem,它将具有所有行为功能。线路板和瓷砖应继承自项目。这应该可以解决一些复杂的问题。

我建议这样做:您应该有两个接口1。董事会行为2。瓷砖行为。分别在类板和类块中实现它们。现在,董事会应该有瓷砖清单。这个问题可以通过联想或组合来解决。我建议你和我联系一下。这意味着在您的Board类中,可以引用仅实现TilesBehavior的Tile列表。我希望我在这里听起来不太复杂。如果我是,请告诉我,我将提供此方法的代码以使其更清楚

这与C#、Java还是仅与类设计有关?仅与类设计有关,我使用csharp/Java术语。实际上,这个程序将使用Csharp,但我认为这并不重要唯一的Java术语是POJO。从问题中删除了Java。为什么
Board
没有
boardbehavior
Tile
没有
TileBehaviour
?这不是与统一有很大关系吗?我不认为您只需要纯C语言的复杂行为类。OP没有与术语混淆,而是询问如何解决这个类设计问题。请注意,这是支持建议的设计的一种方式,但OP询问的是类设计。@Luigimendoza-奇怪。这是OP问题
如何连接模型和实际的UI类有什么想法吗?
检查标题:“是一个”、“有一个”关系设计决策。好吧,我同意OP把我们和真正的问题混淆了。我建议添加一些基本的例子,并使用提供的格式化技术格式化你的答案。