Is my code overdesigned? Does it rely too heavily on interfaces?
Is my code overdesigned?


I think so ;)




  IChunk&lt;T&gt; is intended to be a grid object with a predetermined size.

public interface IChunk&lt;T&gt; : IGrid&lt;T&gt;
{
}



But a grid is already a grid object with a predetermined size:


public interface IGrid&lt;T&gt;
{
    Point Size { get; }
    T this[int x, int y] { get; set; }
}



I don't think you need IChunk&lt;T&gt;. Why not just use a IGrid&lt;T&gt;?



IGrid&lt;T&gt; is redundant here:


public class Mesh&lt;T&gt; : Grid&lt;T&gt;, IMesh&lt;T&gt;



Because IGrid&lt;T&gt; is already specified by IMesh&lt;T&gt;, you can't implement IMesh&lt;T&gt; without implementing all of IGrid&lt;T&gt;, because IMesh&lt;T&gt; : IGrid&lt;T&gt;.



I might be wrong, but it seems to me that "adding up" two terrains is a non-trivial operation that would be best rendered as a full-fledged method than in an operator for the terrain itself. Can you make an operator async?