こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

APIをラップしたクラスの設計と開発

APIを使用する際、APIの利用部分を1箇所に集めておくために、
ラップするクラスを作った上で、そのラッパー経由でAPIを使用するようにしています。

そのラッパークラスの設計と実装で、わからないことがあります。


下の【1】と【2】を同時に実現しようとしたら、
矛盾してできないようなのです。


【1】
ラッパークラスを作る際、
  (1)インタフェースを定義するための基底クラスと、
  (2)その基底クラス(インタフェース)を実装する側のクラスを作ろうとしました。


【2】
使うAPI(ミドルウェア)を切り替える可能性があったので、
  ・どのようなミドルウェアでも共通に使えるようなインタフェースにしようとしました。


しかし、インタフェースを作ろうとした時点で、
インタフェースとして使われるというか、
引数として渡したり、戻り値として返して貰う「データ型」「クラス」が、
「ミドルウェア」に依存してしまうために、
「基底クラスのインタフェース」にミドルウェア固有の型が入らざるを得ないと感じました。


通常、【1】と【2】は同時には実現できないという認識で良いのでしょうか?


また、【1】の基底クラスと実装クラスを分けるということだけを実現しようとするなら、
 データ型xを、 
 #Define WrappedX ラップデータ型X;
 #Define WrappedY ラップデータ型Y;

 とした上で、基底クラスのインタフェースで登場する、
 Inputの型とOutoutの型を、見かけ上、ラップデータ型X、ラップデータ型Y
 にすることを考えていますが、
 他の開発者の方はどのような方法でクラスの設計・開発をしているのでしょうか?


※引数も、戻り値も、
 voidポインタにして、ダウンキャストして、、
 ということもできるのかもしれませんが、
 その方法はなんだか抵抗を感じますし、自分の力量では不具合があったときに対処できないため、
 事実上採用できない感じです。
.

投稿日時 - 2015-03-07 11:49:01

QNo.8930869

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.3

>「引数や戻り値に使用する型(クラス)をミドルウェアに依存しないようにするにはどうすればいいですか?」という題名で質問をしたかったのです。

ラッパー関数で使用するためのクラスや型を作って、APIを呼び出す際に変換すればいいです。
ミドルウェア固有の機能や、ラッパーがただ関数名(API名)を変えてるだけの実装などの場合はさすがに無理ですが。

C++ではありませんが、APR-utilのdbdなどを参考にしてみてください。
https://apr.apache.org/

投稿日時 - 2015-03-08 12:46:05

ANo.2

引数や戻り値に使用する型(クラス)をミドルウェアに依存しないようにすればいいです。

投稿日時 - 2015-03-07 13:26:20

お礼

質問の仕方が悪かったです。
「引数や戻り値に使用する型(クラス)をミドルウェアに依存しないようにするにはどうすればいいですか?」という題名で質問をしたかったのです。

投稿日時 - 2015-03-08 00:06:21

ANo.1

Javaだけど、JDBCの実装を参考にしてみたら?あれもドライバ入れ替えでインターフェースはある程度共通だし、近しいんじゃない?

投稿日時 - 2015-03-07 13:04:19

お礼

ありがとうございます。
見てみます。

投稿日時 - 2015-03-08 00:05:13

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-