【发布时间】:2021-10-13 00:38:09
【问题描述】:
我在奥尔良为游戏玩家准备了一份粮食。播放器有几个我想在客户端直接访问的属性。是否有可能,是否有效,将这些作为公共财产是否有意义?或者,我应该有一个 GetAllState 方法,该方法返回一个 DTO,其中包含谷物中这些属性的当前值?
public interface IPlayerGrain : IGrainWithIntegerKey
{
// Individual public properties to access grain state?
string Name { get; }
int Score { get; }
int Health { get; }
// Or, get all the current grain state as DTO?
Task<PlayerState> GetAllState();
}
根据我目前的理解,我认为我需要使用 GetAllState,因为我认为任何与谷物的通信都需要通过一种方法,这可能会在孤岛之间传递。因此,您可能希望最小化传递的消息数量,并且不想传递三个消息来获取名称、分数和健康。或者,消息传递是否非常便宜,而不是我应该担心做太多事情?在我的示例中,我只包含了 3 个属性,但在我的真实游戏中还会有更多。
但是,我真的不喜欢拥有一个只是颗粒内部属性副本的贫血 DTO 模型的想法。
所以我想知道在奥尔良是否有更好的方法或首选模式?
【问题讨论】:
标签: orleans