2017-11-05 3 views
-1

ビューまたは別のクラスのインターフェイスを継承する:WPFは、私はメディアプレーヤープログラムを作ってるんだと私は次のインターフェイス持って

public interface IMediaService 
{ 
    void Play(); 
} 

MediaElementコントロールビューでインターフェースを継承するために、より適切であろうが存在および方法の実装に直接アクセスするか、むしろこのような別のクラスにそれを持っている:

public class MediaPlayer : IMediaService 
{ 
    private MediaElement _mediaElement; 
    public MediaPlayer(MediaElement mediaElement) 
    { 
     _mediaElement = mediaElement; 
    } 

    public void Play() 
    { 
     _mediaElement.Play(); 
     //... 
    } 
} 

ビューで継承対:

public partial class MainWindow : IMediaService 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    void IMediaService.Play() 
    { 
     Player.Play(); 
     //.. 
    } 
} 

私はMVVMを使用していませんが、これらのメソッドはコマンドによるバインディングとして使用できます。

私が2番目のアプローチで見られる問題は、私のビュークラスが本当に素早く詰まってしまうことです。

私が言及していない代替ソリューションには開いていますが、これは私がatmで思いついたものです。

+0

メインウィンドウにメディアプレーヤーを操作する責任を負うべきではないため、最初のアプローチで進む方が良いです。それは別にそれを保つのが良い。 – Parag

+1

_「MVVMを使用していません」_ WPFで適切なイディオムを使用しないことに困惑していますが、インターフェイスを実装するクラスについてのStack Overflowユーザーの_opinions_が単一のウィット。 –

+0

@PeterDunihoあなたのコメントのポイントが表示されません。あなたがここにいれば、ちょっとニブルにしてください。 – Deadzone

答えて

1

それのMediaElementコントロールが存在ビューでインタフェースを継承し、メソッドの実装に直接アクセスするか、むしろこのような別のクラスでそれを持つことがより適切であろう:

MVVMに関する限り重要なことはありません。本当に間違いはありません。それは開発者の個人的な好みに依存します。ビューを汚染したくない場合は、別のクラスを作成します。いくつかのメソッドをビューに追加しても構わない場合は、そうしないでください。

別々のクラスを使用する利点は、複数の異なるビュー/ MediaElementに再利用できることです。

しかし、ビューモデルはインターフェイス自体のみを気にします。つまり、実際の実装に依存しません。

関連する問題