域模型中的域服务与实体方法
Domain Services vs Entity Methods in Domain Model
我知道域服务和应用程序服务之间的区别。但是无法真正看出域实体和域服务中的方法之间的区别:/
我有一个游戏,有State
、Players
等。还有AddPlayer
、MoveLeft
、Jump
等方法。这些方法去哪儿了?我应该创建仅具有属性的裸 KOGame
,然后创建具有功能的 KOGameServices
吗?
Bob 叔叔在他的文章 here 中写道 "An entity can be an object with methods, or it can be a set of data structures and functions."
我什至不想提及像 Move
或 Jump
这样的方法 也必须在应用程序服务中,在 KOGameAPI
- 因为 UI 需要这些方法(当然是通过接口)。
这是我的 class:
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
class,我应该什么时候创建 Class1Services
class?
编辑:
简单解释一下为什么我选择 DDD
:
我想创建跨平台应用程序,我希望每个平台都有一个通用的单层。我选择 C#
,因为在 Xamarin
的帮助下,我可以轻松地为每个平台实现单域模型甚至服务。我只是在决定什么方法应该进入服务以及什么作为 Domain Model
中实体的一部分
如果要完成一个用例,您需要在域级别协调 2 个或更多聚合,您可以将协调逻辑放在调用聚合方法的域服务中。如果只需要一个聚合,则不涉及域服务。只需从应用服务调用聚合方法。
如果一个方法在逻辑上属于一个实体,就把它放在那里。如果没有任何实体使该方法有意义,请将其放入(无状态!)域服务中。
例如,移动玩家的方法应该在玩家实体上 - 将它放在那里感觉很自然,因为它修改了特定玩家。
另一方面,一种方法,例如计算两个玩家的得分差异可以作为域服务实现。
我知道域服务和应用程序服务之间的区别。但是无法真正看出域实体和域服务中的方法之间的区别:/
我有一个游戏,有State
、Players
等。还有AddPlayer
、MoveLeft
、Jump
等方法。这些方法去哪儿了?我应该创建仅具有属性的裸 KOGame
,然后创建具有功能的 KOGameServices
吗?
Bob 叔叔在他的文章 here 中写道 "An entity can be an object with methods, or it can be a set of data structures and functions."
我什至不想提及像 Move
或 Jump
这样的方法 也必须在应用程序服务中,在 KOGameAPI
- 因为 UI 需要这些方法(当然是通过接口)。
这是我的 class:
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
class,我应该什么时候创建 Class1Services
class?
编辑:
简单解释一下为什么我选择 DDD
:
我想创建跨平台应用程序,我希望每个平台都有一个通用的单层。我选择 C#
,因为在 Xamarin
的帮助下,我可以轻松地为每个平台实现单域模型甚至服务。我只是在决定什么方法应该进入服务以及什么作为 Domain Model
如果要完成一个用例,您需要在域级别协调 2 个或更多聚合,您可以将协调逻辑放在调用聚合方法的域服务中。如果只需要一个聚合,则不涉及域服务。只需从应用服务调用聚合方法。
如果一个方法在逻辑上属于一个实体,就把它放在那里。如果没有任何实体使该方法有意义,请将其放入(无状态!)域服务中。
例如,移动玩家的方法应该在玩家实体上 - 将它放在那里感觉很自然,因为它修改了特定玩家。
另一方面,一种方法,例如计算两个玩家的得分差异可以作为域服务实现。