зависимости между представлением, презентером и интерфейсом

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

Мне нужно сослаться на моего ведущего в моей сборке представления Мне нужно сослаться на мой интерфейс (который находится в той же сборке, что и ведущая) в моей сборке представления

Итак, я ссылаюсь на сборку презентатора/интерфейса в представлении, поскольку все они находятся в одном месте.

и теперь возникает проблема: мне нужно сослаться на свое представление в сборке презентатора/интерфейсов, чтобы иметь возможность использовать один из моих типов представления (несистемный тип, настраиваемый элемент управления) для определения свойства и средств доступа в моем интерфейсе. Я не могу из-за круговой зависимости, и я думаю, что даже если я перенесу свой интерфейс в третью сборку, у меня всегда будет компакт-диск между этой новой сборкой и представлением (потому что моему представлению нужен мой интерфейс, а моему интерфейсу нужен мой Посмотреть)

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

Нелегко быть ясным, поэтому не стесняйтесь спрашивать меня больше,

Заранее всем большое спасибо.

С наилучшими пожеланиями.


person benj007    schedule 21.09.2010    source источник


Ответы (1)


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

Пример:

Интерфейс.dll:

public interface IMyView { string title; }
public interface IMyPresenter { string GetTitle(); }

View.dll:

public MyView : IMyView
{
    private IMyPresenter _myPresenter;
    public string Title { get { return _myPresenter.GetTitle(); } }
}

презентатор.dll:

public MyPresenter : IMyPresenter
{
    private IMyView _myView;

    public string GetTitle()
    {
        return ResourceManager["titleResource"];
    }
}

Хотя в моем понимании ведущего модельного представления, представление не просто публикует все, что нужно ведущему, и представление не знает о ведущем, скорее вы передаете IView ведущему, и оно привязывается к представлению везде, где необходимо ?

person Jimmy Hoffa    schedule 21.09.2010
comment
спасибо за время, потраченное на ответ, я посмотрю, что в эти выходные - person benj007; 23.09.2010
comment
Я категорически не согласен. Вы даете больше задач идеально тупому взгляду. Вся эта логика презентации должна быть включена в презентер и, желательно, даже в проводку. Представьте, что у вас есть другое приложение для просмотра, и вы должны выполнять все вызовы и там. Так что нет необходимости в IPresenter. Просто передайте IView ведущему, и пусть он справится с этим. - person nawfal; 21.01.2013