谈到Model View Presenter模式之后的随笔[讨论版]
点击次数:17 次 发布日期:2008-11-26 09:55:16 作者:源代码网
|
源代码网推荐 ModelViewPresenter 模式已经推出快二年了吧,今天公司新的兄弟,午饭时和我谈到有关于在项目中是否可以使用MVP模式,然后呼啦啦和我讲了许多,我听了蛮有感处的,但结果让这位兄弟写的时候,他却写了大半个下午,还没个MVP影子,Jezz! 我只好花上10几个分钟的时间写了一个Demo。 源代码网推荐 本来想不发到Blogs中,但是还是和大家分享一下, 源代码网推荐 第一,让初学者有关的例子可以参照,毕竟读代码,要比看书有感觉, 源代码网推荐 第二,也可以让高手们指点指点,有哪些不足,然后看看高手们能不能就有关于MVP模式,在项目中的应用谈谈他们的看法。 源代码网推荐 第三,有关于MVP模式的文章cnblogs中好像很少,因为我只看到过两篇,一篇是介绍MVP模式的,一篇是翻译的吧。 源代码网推荐 *嗯,不管大家对以下的代码部分有什么疑义,都可以进行评论,希望可以达到共同学习,互相学习的目的,评出你的观点,说出你的理解。 源代码网推荐 (希望不要说粗口,这样就不好了。) 源代码网推荐 以下是代码部分: 源代码网推荐 源代码网推荐 ModelLayer: 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 namespace MVPDesign.ModelLayer 源代码网推荐 { 源代码网推荐 public class XmlData 源代码网推荐 { 源代码网推荐 /**//// <summary> 源代码网推荐 /// 根据Id取得Xml中的数据 源代码网推荐 /// </summary> 源代码网推荐 /// <typeparam name="T">返回的Type</typeparam> 源代码网推荐 /// <typeparam name="V">Id的Type</typeparam> 源代码网推荐 /// <param name="id"></param> 源代码网推荐 /// <returns>XmlData</returns> 源代码网推荐 public static T GetDataById<T, V>(V id) where T : XmlData 源代码网推荐 { 源代码网推荐 XmlDocument xmldocument = new XmlDocument(); 源代码网推荐 源代码网推荐 xmldocument.Load("XmlData.xml"); 源代码网推荐 String path = "/XmlData/Data[@id={0}]/{1}"; 源代码网推荐 XmlNode titleNode = xmldocument.SelectSingleNode(String.Format(path, id, "Title")); 源代码网推荐 XmlNode textNode = xmldocument.SelectSingleNode(String.Format(path, id, "Text")); 源代码网推荐 源代码网推荐 XmlData xmlData = new XmlData(); 源代码网推荐 xmlData.title = titleNode.InnerText; 源代码网推荐 xmlData.text = textNode.InnerText; 源代码网推荐 return xmlData as T; 源代码网推荐 } 源代码网推荐 源代码网推荐 internal String title; 源代码网推荐 /**//// <summary> 源代码网推荐 /// 相对应于XML文件中的Title 源代码网推荐 /// </summary> 源代码网推荐 public String Title 源代码网推荐 { 源代码网推荐 get { return title; } 源代码网推荐 } 源代码网推荐 源代码网推荐 internal String text; 源代码网推荐 /**//// <summary> 源代码网推荐 /// 相对应于XML文件中的Text 源代码网推荐 /// </summary> 源代码网推荐 public String Text 源代码网推荐 { 源代码网推荐 get { return text; } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 ViewLayer: 源代码网推荐 namespace MVPDesign.ViewLayer 源代码网推荐 { 源代码网推荐 public interface IDataView 源代码网推荐 { 源代码网推荐 Int32 DataId { get; } 源代码网推荐 String Title { set; } 源代码网推荐 String Text { set; } 源代码网推荐 } 源代码网推荐 源代码网推荐 public class DataPresenter 源代码网推荐 { 源代码网推荐 internal readonly IDataView view; 源代码网推荐 源代码网推荐 public DataPresenter(IDataView view) { this.view = view; } 源代码网推荐 源代码网推荐 public void RetrieveData() 源代码网推荐 { 源代码网推荐 XmlData myPost = XmlData.GetDataById<XmlData,Int32>(view.DataId); 源代码网推荐 view.Title = myPost.Title; 源代码网推荐 view.Text = myPost.Text; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 PresenterLayer: 源代码网推荐 using MVPDesign.ViewLayer; 源代码网推荐 namespace Presenter 源代码网推荐 { 源代码网推荐 public partial class PresenterLayer : Page, IDataView 源代码网推荐 { 源代码网推荐 private DataPresenter dataPresenter; 源代码网推荐 源代码网推荐 protected void Page_Load(object sender, EventArgs e) 源代码网推荐 { 源代码网推荐 dataPresenter = new DataPresenter(this); 源代码网推荐 } 源代码网推荐 源代码网推荐 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 源代码网推荐 { 源代码网推荐 dataPresenter.RetrieveData(); 源代码网推荐 } 源代码网推荐 源代码网推荐 Int32 IDataView.DataId 源代码网推荐 { 源代码网推荐 get { return Convert.ToInt32(this.DDL.SelectedValue); } 源代码网推荐 } 源代码网推荐 源代码网推荐 String IDataView.Title 源代码网推荐 { 源代码网推荐 set { this.lblTitle.Text = value; } 源代码网推荐 } 源代码网推荐 源代码网推荐 String IDataView.Text 源代码网推荐 { 源代码网推荐 set { this.lblText.Text = value; } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 XMLFile: 源代码网推荐 <?xml version="1.0" encoding="utf-8" ?> 源代码网推荐 <XmlData> 源代码网推荐 <Data id="1"> 源代码网推荐 <Title>Linq</Title> 源代码网推荐 <Text>Linq To Memery Object</Text> 源代码网推荐 </Data> 源代码网推荐 <Data id="2"> 源代码网推荐 <Title>BLinq</Title> 源代码网推荐 <Text>Linq To Web</Text> 源代码网推荐 </Data> 源代码网推荐 <Data id="3"> 源代码网推荐 <Title>XLinq</Title> 源代码网推荐 <Text>Linq To Xml</Text> 源代码网推荐 </Data> 源代码网推荐 <Data id="4"> 源代码网推荐 <Title>DLinq</Title> 源代码网推荐 <Text>Linq To DataBase</Text> 源代码网推荐 </Data> 源代码网推荐 <Data id="5"> 源代码网推荐 <Title>SLinq</Title> 源代码网推荐 <Text>Linq To Stream</Text> 源代码网推荐 </Data> 源代码网推荐 </XmlData> 源代码网推荐 PresenterForm: 源代码网推荐 <form id="form1" runat="server"> 源代码网推荐 <table style="width: 659px; height: 481px"> 源代码网推荐 <tr> 源代码网推荐 <td style="width: 178px"> 源代码网推荐 <asp:Label ID="lblChoose" runat="server" Text="Please Choose ,Feeling MVP" Width="195px"></asp:Label><br /> 源代码网推荐 <asp:DropDownList ID="DDL" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True"> 源代码网推荐 <asp:ListItem Text="Please Choose Option" Value="0"></asp:ListItem> 源代码网推荐 <asp:ListItem Text="Linq" Value="1"></asp:ListItem> 源代码网推荐 <asp:ListItem Text="BLinq" Value="2"></asp:ListItem> 源代码网推荐 <asp:ListItem Text="XLinq" Value="3"></asp:ListItem> 源代码网推荐 <asp:ListItem Text="DLinq" Value="4"></asp:ListItem> 源代码网推荐 <asp:ListItem Text="SLinq" Value="5"></asp:ListItem> 源代码网推荐 </asp:DropDownList> 源代码网推荐 </td> 源代码网推荐 <td> 源代码网推荐 <asp:Label ID="lblDisplayTitle" runat="server" Text="DisplayTitleFromXml"></asp:Label><br /> 源代码网推荐 <asp:Label ID="lblTitle" runat="server" Font-Size="Larger" ForeColor="Red"></asp:Label> 源代码网推荐 </td> 源代码网推荐 <td> 源代码网推荐 <asp:Label ID="lblDisplayText" runat="server" Text="DisplayTextFromXml"></asp:Label><br /> 源代码网推荐 <asp:Label ID="lblText" runat="server" Font-Size="Larger" ForeColor="Blue"></asp:Label> 源代码网推荐 </td> 源代码网推荐 </tr> 源代码网推荐 </table> 源代码网推荐 </form> 源代码网推荐 程序最终运行截图: 源代码网推荐
源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
