【发布时间】:2015-12-30 03:10:14
【问题描述】:
我知道域和应用程序服务之间的区别。但是实在看不出领域实体和领域服务中的方法有什么区别:/
我有一个游戏,它有State、Players 等。它也有像AddPlayer、MoveLeft、Jump 这样的方法。这些方法去哪儿了?我应该只创建带有属性的裸KOGame,然后创建带有功能的KOGameServices?
鲍勃叔叔在他的文章here 中写道“实体可以是带有方法的对象,也可以是一组数据结构和函数。”
我什至不想提及 Move 或 Jump 之类的方法 也必须在应用服务中,在 KOGameAPI 中 - 因为 UI 需要这些方法(当然是通过接口)。
这是我的课:
public class KOGame
{
public GameState State { get; set; }
public IList<Player> Players { get; set; }
public int PlayersCount;
public KOGame()
{
State = GameState.New;
PlayersCount = 2;
Players = new List<Player>();
}
public void AddPlayer(Player player)
{
}
public bool MoveRight(int id)
{
return false;
}
public bool MoveLeft(int id)
{
return false;
}
public bool Jump(int id)
{
return false;
}
}
那么,结束我的问题:哪些方法用于域服务,哪些方法用于域实体?例如 Class1 类,我应该什么时候创建 Class1Services 类?
编辑:
简单解释一下我为什么选择DDD:
我想创建跨平台应用程序,我希望每个平台都有一个通用的单层。我选择C#,因为在Xamarin 的帮助下,我可以轻松实现单个域模型甚至每个平台的服务。我只是在决定哪些方法应该去服务以及作为Domain Model中实体的一部分时遇到了困难
【问题讨论】:
-
洋葱架构、DDD、域服务、应用程序服务...对于视频游戏的架构?我认为你走错路了。
-
@jlvaquero +1,对于一些慢节奏、基于浏览器的游戏,它可能是一个选择,但在这里它看起来像是一个实时游戏,所以我绝对同意 DDD 不适合。
-
@jlvaquero 好的,但问题是:哪些方法用于域服务,哪些方法用于域实体?例如 Class1 类,我应该什么时候创建 Class1Services 类?
-
@guillaume31 不知道“实时游戏”是什么意思?但它会是一个手机游戏,就像国际象棋、四连环,更像是“回合制游戏”。我想使用 C#(通过 Xamarin)并为所有平台编写单一模型。所以我的观点是我想拥有共同的 dll,共同的域——那是因为我想使用 Onion Architecture。
-
@guillaume31 我说的是玩家与棋盘互动比他们自己更多的游戏。像国际象棋、四连线、井字游戏等。所以
Game对象有Board、List<Player>、GameState等。我想创建这样的游戏跨平台,所以洋葱拱。是我的第一选择。理论上,在我之前提到的游戏中,在单人模式下——有一点点AI。你会推荐我什么架构?或者至少是我的研究方向?
标签: c# .net architecture domain-driven-design