Можно ли избежать ссылок на сборки, от которых наследуются существующие ссылки? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть сборка, которая содержит базовые объекты для моих бизнес-объектов, а затем другая сборка, которая автоматически создается и заполняется классами на основе схемы базы данных.Все классы в последней сборке наследуются от класса в первой.

У меня была идея, что я могу ссылаться на сгенерированную сборку из других проектов, а не на сборку с базовыми объектами, таким образом скрывая некоторыедеталей реализации и запрещения людям использовать эти объекты.

К сожалению, я понимаю, что не могу использовать какую-либо функциональность, встроенную в базу, если я не буду ссылаться на нее.Итак, мой вопрос: есть ли что-нибудь вокруг этого, и если нет, то есть ли шаблон проектирования, который решает эту проблему, который я должен использовать?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вопрос звучит немного задом наперед. Вы скрываете свой уровень бизнеса / домена с уровнем данных? Обычно это было бы наоборот.

В любом случае. Проблема звучит так, как будто у вас есть:

  1. Сборка A

    class Bar
    
  2. Сборка B

    class Foo : Bar
    

Сборка C должна ссылаться как на A, так и на B, чтобы использовать Foo.

Следующим принципом разработки будет отдавать предпочтение композиции по сравнению с наследованием .

Вместо того, чтобы Foo наследовал от Bar, Foo может содержать экземпляр Bar и раскрывать, какие методы имеют смысл для Foo. Все это предполагает, что Foo на самом деле не является специализированной версией Bar.

1 голос
/ 17 февраля 2012

Если вы действительно не хотите предоставлять базовые классы другим (подумайте о расширяемости), то вам, вероятно, следует переместить базы в ту же сборку, что и бетоны.

Если вам все еще нужны отдельные сборкивы все равно можете сделать базы внутренними, а затем установить атрибут InternalVisiblesToAttribute для сборки базового класса:

(в AssemblyInfo.cs)

using System.Runtime.CompilerServices;

[assembly:InternalsVisibleTo("ConcreteClassAssembly")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...