Typed & Untyped: как бы спрятать внутренности?
От: Sinix  
Дата: 17.02.11 03:36
Оценка:
Есть несколько классов со сложной логикой внутри. Для инфраструктуры приложения должны быть доступны untyped-версии методов, для бизнес-логики желательно иметь красивую типизированную обёртку c парой свойств и методов.

Если решать в лоб (сампл взят из головы):
abstract class OptionSet
{
  public abstract object this[object key]
  {
    get;
    set;
  }
}
class SomeOptionSet: OptionSet
{
  public SomeOption1
  {
    get { return base["SomeOption1"]; }
  }
  public SomeOption2
  {
    get { return base["SomeOption2"]; }
  }
}

из typed-обёрток (SomeOptionSet) будут торчать наружу внутренности (в примере — индексер, у настоящих классов — зоопарк из методов и свойств).

Спрятать OptionSet в приватное поле не выйдет: куча кода, вызываемого из бизнес-логики, принимает OptionSet в качестве параметра.

Можно объявить внутренности как protected internal. Единственный недостаток: вся инфрастуктура должна будет жить в той же сборке, что и OptionSet. Уже сейчас не выйдет: инфраструктура расширяемая

Вариант 3 — объявить внутренности как protected, дополнительно ввести интерфейс IOptionSet и предоставить доступ к внутренностям через явную реализацию интерфейса.

Ещё идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.