0

これに関連するいくつかの質問をしましたが、まだ決定的な回答が得られていないため、ここでより簡単な質問をします。

このことを考慮。私は2つのインターフェースを持っています。1 つは dao について説明します。1 つは wcf インターフェイスです。wcf インターフェースは、そのメソッドを wcf 属性で公開するために dao インターフェースを継承します。これは wcf インターフェースであるため、[OperationContract] などの wcf 属性を配置するために、メソッドを再度宣言する必要があります。その結果、以前のインターフェイス メソッドを事実上隠しており、それらに「new」キーワードを配置する必要があります。これは、この状況で行う正しいことですか。wcf インターフェイスを介して dao インターフェイス メソッドを提示できるようにする必要があるため、それを継承する必要があります。これらの関数を公開するように wcf インターフェイスを強制したいと考えています。私の手はかなり縛られており、メソッドを公開するためにこのアプローチを使用する必要があるようですが、どう思いますか?

コード的には、次のようになります。

//The dao interface
public interface IMyDao
{
    void Foo();
}

//The wcf interface which implements/extends the IMyDao interface in order to add wcf attributes
[ServiceContract]
public interface IMyWCF : IMyDao
{
    [OperationContract]
    new void Foo();
}

//The dao class that implements the dao interface
public class MyDao : IMyDao
{
    public void Foo()
    {
        //Do something
    }
}

//The class implements the wcf interface. Makes calls to the dao.
public class MyWCF : IMyWCF
{
    public void Foo()
    {
        MyDao myDao = new MyDao();

        myDao.Foo();  
    }
}
4

1 に答える 1

3

2 つのインターフェイスを使用する - DAO と WCF コントラクトで 1 つのインターフェイスを共有しない

WCF サービス呼び出しを DAO に渡すラッパーを含めます。

たとえば、DAO に次のメソッドがあるとします。

public interface IMyDAO
{
    MyObject GetMyObjectById(int Id);
}

同じ署名を持つ操作コントラクトがあります。

public interface IMyWCFContract 
{
    [OperationContract]
    MyObject GetMyObjectById(int Id);
}

そして、ラッパークラスがあります:

public class MyWCFService : IMyWCFContract
{
     private MyDAO dao;

     public MyWCFService()
     {
        dao = new MyDAO(); 
     }

     public MyObject GetMyObjectById(int id)
     {
        return dao.GetMyObjectById(id);
     }
}

別の計画として、代わりにRESTFULサービスの使用を検討することもできます。

于 2012-07-27T09:49:21.783 に答える