C# &引用;是一个&引用;有一个;关系设计决策
我有一块木板,木板上有活动的瓷砖。 很简单,我的模型将有一个Board类和一个Tile类,即POCO和Board“有”tiles(Board有一个IList) 我有一个UI(Unity3d行为)说BoardBehavior“有一个”板。但我的问题开始了。我还有TileBehaviour UI对象,它“有一个”Tile。这似乎是多余的,因为: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都有一个
- 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把我们和真正的问题混淆了。我建议添加一些基本的例子,并使用提供的格式化技术格式化你的答案。