문제

나는 이것과 관련하여 몇 가지 질문을했지만, 여기서는 결정적인 답변이 없으므로 더 간단한 질문이 있습니다.

이것을 고려하십시오.나는 2 개의 인터페이스가있다.하나는 DAO를 설명합니다.하나는 WCF 인터페이스입니다.WCF 인터페이스는 WCF 속성을 사용하여 메소드를 노출하기 위해 DAO 인터페이스를 상속합니다.WCF 인터페이스이기 때문에 물론 [OperationContract]와 같이 WCF 속성을 배치하기 위해 방법을 다시 선언해야합니다.결과적으로 나는 이전의 인터페이스 방법을 숨기고 '새로운'키워드를 배치해야합니다.이 상황 에서이 일을하는 것이 올바른 일입니까?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();  
    }
}
.

도움이 되었습니까?

해결책

2 인터페이스를 사용하십시오 - DAO 및 WCF 계약을위한 인터페이스를 공유하지 마십시오

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);
     }
}
.

대체 계획은 편안한 서비스 대신

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top