Design issue when having classes implement different interfaces to restrict client actions

Posted by devoured elysium on Stack Overflow See other posts from Stack Overflow or by devoured elysium
Published on 2010-05-13T14:04:41Z Indexed on 2010/05/13 14:24 UTC
Read the original article Hit count: 160

Let's say I'm defining a game class that implements two different views:

interface IPlayerView {
    void play();
}

interface IDealerView {
    void deal();
}

The view that a game sees when playing the game, and a view that the dealer sees when dealing the game (this is, a player can't make dealer actions and a dealer can't make player actions). The game definition is as following:

class Game : IPlayerView, IDealerView {
    void play() { ... }
    void deal() { ... }
}

Now assume I want to make it possible for the players to play the game, but not to deal it. My original idea was that instead of having

public Game GetGame() { ... }

I'd have something like

public IPlayerView GetGame() { ... }

But after some tests I realized that if I later try this code, it works:

IDealerView dealerView = (IDealerView)GameClass.GetGame();

this works as lets the user act as the dealer.

Am I worrying to much? How do you usually deal with this patterns? I could instead make two different classes, maybe a "main" class, the dealer class, that would act as factory of player classes. That way I could control exactly what I would like to pass on the the public. On the other hand, that turns everything a bit more complex than with this original design.

Thanks

© Stack Overflow or respective owner

Related posts about object-oriented-design

Related posts about c#