2012-02-17 16 views
1

私は、Business Objectsの基本オブジェクトを含むアセンブリを持っており、データベーススキーマに基づいて自動的に生成され、クラスに基づいて作成される別のアセンブリを持っています。後者のアセンブリのクラスはすべて、前者のクラスから継承しています。既存の参照が継承するアセンブリの参照を避けることはできますか?

私が持っていたアイデアは、他のプロジェクトから生成されたアセンブリを参照でき、ベースオブジェクトを持つアセンブリではないため、実装の詳細が隠れてしまい、人々がこれらのオブジェクトを使用できなくなってしまったということでした。

残念ながら、私がそれを参照しない限り、ベースに組み込まれている機能を使用することはできません。だから私の質問です:とにかくこの周りには、していない場合、私は使用する必要がありますこれに対処するデザインパターンはありますか?

答えて

1

基本クラスを他のものに公開したくない場合(拡張性を考えてください)、おそらくベースをコンクリートと同じアセンブリに移動する必要があります。

あなたはまだアセンブリが分離が必要な場合、あなたはまだ塩基は内部行い、その後、ベースクラスアセンブリにInternalVisiblesToAttributeを設定することができます。

(AssemblyInfo.csで)

using System.Runtime.CompilerServices; 

[assembly:InternalsVisibleTo("ConcreteClassAssembly")] 
+1

完璧な答えではありませんが、おそらく私が得るほど近いでしょう。ありがとう。 –

+0

あなたが良いことを考えているか聞いてもらえたら教えてください! –

3

質問は少し後ろに聞こえます。あなたはあなたのビジネス/ドメイン層をあなたのデータ層で隠していますか?一般的にはそれは逆です。

いずれにしても。問題は、あなたが持っているように聞こえる:

  1. アセンブリAに

    class Bar 
    
  2. 国会B

    class Foo : Bar 
    

アセンブリCがfooを使用するためにAとBの両方を参照する必要があります。

従う設計原理は、よりもの方が好ましい構成になります。

FooはBarから継承するのではなく、Barのインスタンスを含むことができ、Fooに対してどのようなメソッドが意味をなされるかを公開することができます。これは、Fooが実際にBarの特殊バージョンではないことを前提としています。

+1

を私はあなたが正しく理解しているかどうか確かではなく、私は明確にコミュニケーションしていないかもしれません。しかし問題はアセンブリCがFooを使うためにA&Bを参照しなければならないということではなく、アセンブリCはFooを使うときにA&Bを参照してBarの機能を取得しなければならないという問題です。 –

+0

また、Aはデータアクセス層、Bはドメイン層です。まあ、それは技術的に私のコードは今のところ100%真実ではありませんが、一般的に言えばそれです。そして私は、可能ならばAを参照せずにBを参照することができるようにしたいと考えています。あなたはそれを私の周りに他の方法を意味するようにそれを聞こえるようにする... –

+1

@BrandonMoore私は言葉に混乱しているかもしれないと思う。しかし、上記の例では、CはFooを使うためにFooとBarの両方を知る必要があります。アセンブリAを参照しないために、FooはアセンブリAのクラスから継承できません。 – Jacob

関連する問題