title: Efficiently get state from Orleans Grain
body: <p>I have a grain in Orleans for the players of a game. A player has several properties that I want to access directly in the client. Is it possible, is it efficient and does it make sense to have these as public properties on the grain? Or, should I have a GetAllState method that returns a DTO with the current value of these properties in the grain?</p>
  <pre><code>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&lt;PlayerState&gt; GetAllState(); 
  }
  </code></pre>
  <p>From my current understanding I think I will need to use GetAllState as I think any communication into the grain needs to be via a method and this may pass between silos. So, you probably want to minimise the number of messages passed and wouldnt want to pass three messages to get Name, Score and Health. Or, is message passing pretty cheap and not something I should worry about doing too much? In my example I've only included 3 properties, but in my real game there will be many more.</p>
  <p>However, I don't really like the idea of having an anemic DTO model that is just a copy of the grain's internal properties.</p>
  <p>So I was wondering if there was a better way, or a preferred pattern for this sort of thing in Orleans?</p>