Nan*_*ada 3 asp.net mvp design-patterns winforms c#-4.0
几乎没有架构经验,我正在尝试为.NET 4平台设计一个DRY KISS解决方案,采用MVP方法,最终将实现为桌面(WinForms)和Web(ASP.NET或Silverlight)产品.我曾经做过一些MVC,MVVM的工作,但由于某种原因,我很难绕过这个特定的一个,所以为了抓住模式,我决定从最简单的样本开始问你们一些帮助.
所以假设一个非常简单的模型如下(在实践中它绝对是一个WCF调用):
internal class Person
{
internal string FirstName { get; set; }
internal string LastName { get; set; }
internal DateTime Born { get; set; }
}
public class People
{
private readonly List<Person> _people = new List<Person>();
public List<Person> People { get { return _people; } }
}
Run Code Online (Sandbox Code Playgroud)
我在想:
最后:任何机会都有一个完善的,可测试的,轻量级的框架来实现这一目标吗?
小智 5
我编写了许多需要GUI和winforms UI的应用程序,我通常用来实现MVP的方法是创建一个通用的视图接口(你可以将它子类化为更具体的视图)和一个给出的控制器基类一个看法.然后,您可以创建从IView(或更具体的视图)接口继承的不同视图实现
interface IView
{
event EventHandler Shown;
event EventHandler Closed;
void ShowView(IView parentView);
void CloseView();
}
class ControllerBase<T> where T: IView
{
private T _view;
public ControllerBase(T view)
{
_view = view;
}
public T View
{
get { return _view; }
}
public void ShowView(IView owner)
{
_view.ShowView(owner);
}
public void ShowView()
{
ShowView(null);
}
public void CloseView()
{
_view.CloseView();
}
}
Run Code Online (Sandbox Code Playgroud)
下面是一个如何在特定情况下工作的例子
interface IPersonView: IView
{
event EventHandler OnChangeName;
string Name { get; set; }
}
class PersonController: ControllerBase<IPersonView>
{
public PersonController(string name,IPersonView view) : base(view)
{
View.Name = name;
View.OnChangeName += HandlerFunction;
}
private void HandlerFunction(object sender, EventArgs e)
{
//logic to deal with changing name here
}
}
Run Code Online (Sandbox Code Playgroud)
要在winforms中实现此视图,只需确保您的表单继承自IPersonView并实现所有必需的属性/事件,您就可以开始使用了.要实例化视图/控制器,您需要执行以下操作
PersonForm form = new PersonForm();
PersonController controller = new PersonController("jim",form);
controller.ShowView();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1882 次 |
| 最近记录: |