データ型

 データ型を複数のDLLに分散させることが不可能なのはなんでか。不可能ということはないんだがデータ型は相互参照しうる。

 処理、データ型、データに分割した時の、データ型は抽象化したところであまり意味がない。intならintであるべきで、それが実はlongだったりしても別にうれしくない。XMLなんかにすればプラットフォーム非依存に出来るしコンパイル無しでデータを変更できるがそういうのに興味はない。プログラムで使われるときの、XMLを読み込んで代入する実際の型。これが問題だ。

 処理が複数のプラグインに分割されるのはまったく正統なことだ。プラグインごとに必要とするデータ型は異なる。あるプラグインでは一部必要なデータが少なくなったり、何かの処理をした後のデータが欲しかったりするだろう。

 でもそのデータ型がセッターを持つならば、インスタンスは複数のプラグインで共通のものが使われてないと矛盾してしまう。なのでプラグインのデータインターフェースはそれぞれちょっと違うかもしれないが、各プラグインのデータインターフェースを全部実装した単一のクラスが必要になる。

 単一のクラスを複数のDLLのクラスを集約して書けないかと思うのだが、それだと部分のDLLで自分の実際の型が何かを知りたくなった時、統一クラスDLLを参照せざるを得なくなる。統一DLLは部分DLLを当然参照するので、相互参照になって破綻する。

 データ型は一通りであり抽象化されないので分離する意味はないのだが、ある部分データだけを再利用したいとなった時に統一DLLを参照しなきゃならなくなるのはおかしい気もする。自分の実際の型を知らなくて済む保証がどっかで見つかればいいのだけど見つからない。ただのケースバイケースなんじゃないかという気がしている。

 各プラグインがデータ型のインターフェースを自前で持つ形式にしないと相互参照してしまう場合が見つかったので、データ型のクラスだけ作ったDLLを各プラグインが参照する形式は無理だと分かった。各部分DLLが実際の型として必要になる全ての情報を持ったインターフェースDLLを参照し、インターフェースDLLを統一DLLが参照して統一クラスに実装する、というとこまでやれば出来る。しかしあまりにも面倒くさくないか。統一DLLにまとめて内部で相互参照させた方がマシなような気がする。