1

私は設計上の問題を抱えています:

例を使用して問題を説明します。

@WebService
public interface GlossaryWebService {
   @Secured("READ")
   public void foo();

   @Secured("READ")
   public void goo(); 
}

実装:

@WebService
public class GlossaryWebServiceImpl implements GlossaryWebService{


   private GlossaryService glossaryService;

   @Override
   public void foo() {
      glossaryService.foo();
   }

   @Override
   public void goo() {
      glossaryService.goo();
   } 
}

インターフェース:

public interface GlossaryService {  
   public void foo();
   public void goo(); 
}

実装:

public Class GlossaryServiceImpl extends GlossaryService{

   @Override
   public void foo() {
       // impl
   }

   @Override
   public void goo() {
       // impl
   }
}

ご覧のとおり、GlossaryWebService を実装する GlossaryWebServiceImpl と GlossaryService を実装する GlossaryServiceImpl があります。

問題は、GlossaryWebServiceImpl が (GlossaryService の) ファサードとして機能し、これがコードの重複を引き起こすことです。GlossaryService のメソッドも GlossaryWebService にある必要があり、GlossaryServiceImpl のメソッドも GlossaryWebServiceImpl にある必要があります。

GlossaryServiceImpl を作成して GlossaryWebService を実装することで、GlossaryWebServiceImpl の作成を節約できます。これにより、2 つの iterfaces と 1 つの実装のみが得られます。

@Securedしかし、GlossaryServiceImpl のメソッドを呼び出すときではなく、Web サービスを通過するときにのみ (GlossaryWebService の) 注釈を実行する必要があるため、これも問題になります。

誰かにアイデアの提案があれば、それは非常に役に立ちます! 前もって感謝します。

4

1 に答える 1

0

GlossaryWebServiceImpl は、サービス フォーム Web サービスにアクセスする際のエントリ ポイントであるため、Web サービス関連のすべての設定 (ロール、その他の注釈) を GlossaryServiceImpl に配置し、すべてのビジネス ロジックを GlossaryServiceImpl に配置します。

@WebService
public class GlossaryWebService{


   private GlossaryService glossaryService;

   @Secured("READ")
   public void foo() {
      glossaryService.foo();
   }

   @Secured("READ")
   public void goo() {
      glossaryService.goo();
   } 
}
于 2013-01-20T12:58:29.327 に答える