我正在使用ASP.NET中的MVP,并希望了解是否有更简单/更清晰的方法来执行此操作。
我有一个有视图的演示者。事实证明,我可以在同一应用程序区域中的其他视图/演示者中重用一些视图属性和演示者方法。
假设我有一个Bar,这在逻辑上是一个Foo。基本主持人FooPresenter对Bar及其兄弟姐妹有着共同的逻辑。 IFoo视图也有共同的属性。
我希望能够将视图视为FooPresenter中的IFooView,并将视图视为BarPresenter中的IBarView并使其成为相同的实例,因此我在视图实现中得到了所有Foo的东西,aspx页。
这就是我所拥有的:
public interface IFooView {
// foo stuff
}
public interface IBarView : IFooView {
// bar stuff
}
public abstract class FooPresenter<T> where T : IFooView {
public FooPresenter(T view) {
this.view = view;
}
private IFooView view;
public T View
{
get { return (T)view; }
}
public void SomeCommonFooStuff() { }
}
public class BarPresenter : FooPresenter<IBarView> {
public BarPresenter (IBarView view)
: base(view) {
}
public void LoadSomeBarStuff() {
View.Stuff = SomeServiceCall();
}
}
有趣的部分是通过执行转换的基类中的属性访问子类中的视图接口。有关于此的任何想法,或有关如何使这更容易维护的建议吗?
答案 0 :(得分:1)
我唯一可以看到的是我要改变的是删除FooPresenter中的私有字段,并坚持使用公共getter和私有setter的属性。
在这种情况下不需要私有字段,只需让泛型为您完成工作。
答案 1 :(得分:0)
我做了类似的事情,在BarPresenter中,我有一个公共的IBarView View {get {return(IBarView)this.view; }。然后你可以参考大写视图并得到你需要的东西。
答案 2 :(得分:0)
私有字段视图可以声明为类型T,这样可以避免不必要的强制转换
private T view;