由于我们的UI业务相当的简单,就是对Employee对象进行增删改查。因此首先我们定义
MVP中的View接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Demo.Presentation.WCFService;
namespace Demo.Presentation
{
public delegate void VoidEventHandler();
public interface IUserView
{
/// <summary>
/// 当前员工
/// </summary>
Employee CurrentEmployee { get; set; }
/// <summary>
/// 员工列表
/// </summary>
List<Employee> Users { set; }
/// <summary>
/// 新增事件
/// </summary>
event VoidEventHandler OnAddNewEmp;
/// <summary>
/// 删除
/// </summary>
event VoidEventHandler OnDeleteEmp;
/// <summary>
/// 更新
/// </summary>
event VoidEventHandler OnUpdateEmp;
/// <summary>
/// 初始事件
/// </summary>
event VoidEventHandler PrepareView;
}
/// <summary>
/// 定义员工业务的操作
/// </summary>
public interface IUserPresenter
{
void AddNewUser();
void DeleteUser();
List<Employee> GetUsers();
void UpdateUser();
}
}
Presenter的真正实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Demo.Presentation.WCFService;
namespace Demo.Presentation
{
public class UserPresenter:IUserPresenter
{
private IUserView view = null;
public UserPresenter(IUserView View)
{
view = View;
view.PrepareView += new VoidEventHandler(view_PrepareView);
view.OnAddNewEmp += new VoidEventHandler(AddNewUser);
view.OnDeleteEmp += new VoidEventHandler(DeleteUser);
view.OnUpdateEmp += new VoidEventHandler(UpdateUser);
}
void view_PrepareView()
{
view.Users = GetUsers();
}
#region IUserPresenter 成员
public void AddNewUser()
{
using (EmployeeServiceClient client = new EmployeeServiceClient())
{
view.CurrentEmployee= client.Add(view.CurrentEmployee);
}
}
public void DeleteUser()
{
using (EmployeeServiceClient client = new EmployeeServiceClient())
{
client.Delete(view.CurrentEmployee);
}
}
public List<Employee> GetUsers()
{
using (EmployeeServiceClient client = new EmployeeServiceClient())
{
return client.GetEmployees();
}
}
public void UpdateUser()
{
using (EmployeeServiceClient client = new EmployeeServiceClient())
{
client.Update(view.CurrentEmployee);
}
}
#endregion
}
}
}
现在我们来实现客户端的UI。当然UI要响应用户的操作,会调用到Demo. Presentation。但其本身不会直接处理任何数据。
添加一个window类库 Demo.UI
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Demo.Presentation.WCFService;
using Demo.Presentation;
namespace Demo.UI
{
public partial class Form1 : Form,IUserView
{
IUserPresenter presenter = null;
BindingSource bs = null;
public Form1()
{
InitializeComponent();
presenter = new UserPresenter(this);
this.PrepareView();//初始化视图
}
#region IUserView 成员
Employee _currentEmployee = null;
public Employee CurrentEmployee
{
get
{
return _currentEmployee;
}
set
{
_currentEmployee = value;
}
}
public List<Employee> Users
{
set {
bs = new BindingSource();
bs.DataSource = value;
this.dataGridView1.DataSource = bs;
}
}
public event VoidEventHandler OnAddNewEmp;
public event VoidEventHandler OnDeleteEmp;
public event VoidEventHandler OnUpdateEmp;
public event VoidEventHandler PrepareView;
#endregion
private void cmdDelete_Click(object sender, EventArgs e)
{
if (SelectedEmployee != null)
{//可以先确认一下是否删除
OnDeleteEmp();
bs.Remove(_currentEmployee);//完成后将对象从界面中移除
}
}
private void cmdRefresh_Click(object sender, EventArgs e)
{
PrepareView();
}
private void cmdAdd_Click(object sender, EventArgs e)
{
_currentEmployee = new Employee();
//将此对象传到其他窗口,完成编辑
OnAddNewEmp();
bs.Add(_currentEmployee); //新增完成后_currentEmployee对象就是从服务器传回来的对象,有状态,下次更新就不会有问题。
//同时加入到界面中
}
private void cmdUpdate_Click(object sender, EventArgs e)
{
if (SelectedEmployee != null)
{
//此处可以将CurrentUser对象传给其他的窗体进行编辑。
//省略
OnUpdateEmp();
}
}
/// <summary>
/// 判断网格是否有选择的
/// </summary>
Employee SelectedEmployee
{
get
{
if (dataGridView1.SelectedRows.Count == 0)
return null;
_currentEmployee = this.dataGridView1.SelectedRows[0].DataBoundItem as Employee;
return _currentEmployee;
}
}
}
}
我们的界面实现了IUserView接口,在界面里只处理最基本的一些操作,而数据访问的实现实际是是由IUserPresenter来完成的。当有用户操作时,只需引发一些相关的事件。如果要进行UI的移植,那么相应的工作量将会大大的减少。
同时将刚才在Demo.Presentation里的app.config复制到Demo.UI里,此时你可以运行程序了。当然你要记得先运行Demo.WCFHost,再运行Demo.UI
仅仅是一个DEMO相对来说比较的简单,实际在使用EF时真的很难用。很多最终的SQL语句我发觉都不是自己想要的那种简单的。搞得太复杂了。网上的资料也比较少,同时也遇到了很多的难题。以后我会讲一下EF中遇到的问题。
本示例的源码下载:http://download.csdn.net/source/831860
相关推荐
在WCF+EF的示例中,MVP模式可能被用来实现用户界面与服务层之间的解耦。 在这个示例程序中,`Employees.sql`文件可能是用于创建数据库的SQL脚本,包含了一些预定义的员工数据或者用于初始化数据库结构的命令。这与...
标题中的"DevExpress+WindowsService+WCF+EF+SQL"是一个集成的开发框架,结合了多个技术,用于构建高效的企业级应用程序。以下是对这些技术及其在框架中作用的详细解释: 1. DevExpress:DevExpress是一个全面的...
在“WPF+WCF+EF框架实例”中,这三个技术的结合为开发人员提供了一个完整的解决方案,用于构建数据驱动的、具有分布式特性的桌面应用程序。WPF负责前端的用户交互,展示数据和接收用户输入;WCF作为中间层,负责处理...
【标题】"EF+WCF+WPF(MVVM)" 框架简单示例 这是一个集成Entity Framework(EF)、Windows Communication Foundation(WCF)和Windows Presentation Foundation(WPF)的项目,利用Model-View-ViewModel(MVVM)设计...
基于Entity Framework Code First, WCF, MVC3 的网上商店demo
5. **Silverlight客户端**:在Silverlight应用中引用WCF服务,实现UI与服务的交互,展示数据并处理用户操作。 6. **部署与测试**:发布WCF服务,部署到服务器;发布Silverlight应用,确保客户端能正常访问服务。 ...
本文将深入探讨“WCF+Winform Demo”这一主题,这是一套整合了Windows Communication Foundation(WCF)和Windows Forms(Winform)技术的示例应用,旨在展示如何利用WCF服务来承载业务逻辑,并通过Winform客户端...
描述中提到的“一个学习WCF+LINQ+WPF很好的一个范例”,进一步强调了该项目的教育价值,适合那些希望深入理解并实战这四个关键的Microsoft .NET Framework组件的开发者。 **知识点详解** 1. **Windows ...
标题“WCF+WEB+WPF”和描述“WCF WEB WPF WinFrom承载”涉及了四个关键概念:Windows Communication Foundation (WCF),Web技术,Windows Presentation Foundation (WPF)以及WinForms。这些都是微软.NET框架下的核心...
在“WCF+WinForm的基础小例子”中,我们可以预见到以下几个关键知识点: 1. **创建WCF服务**:首先,你需要创建一个WCF服务项目,定义服务接口和实现。服务接口通常包含一系列操作合同,这些合同定义了服务可以执行...
通常,WCF服务作为中间层,处理客户端请求并调用数据访问层,这个数据访问层由Entity Framework提供。以下是一个简单的流程: 1. **客户端请求**:ASP.NET Web应用的客户端发送请求到WCF服务。 2. **WCF服务处理**...
在IT行业中,构建高效、可扩展的软件系统是至关重要的,而基于EF(Entity Framework)+WCF(Windows Communication Foundation)的通用三层架构是实现这一目标的常见方式。本项目展示了如何利用这两种技术来构建一个...
WCF开发实战系列一:创建第一个WCF服务 WCF开发实战系列二:使用IIS发布WCF服务 WCF开发实战系列三:自运行WCF服务 WCF开发实战系列四:使用Windows服务发布WCF服务 WCF开发实战系列五:创建WCF客户端程序
标题"EF6.0+WCF+CodeFirst+SqlServer 对初学者帮助很大"揭示了本文将深入探讨四个关键的IT技术:Entity Framework 6.0(简称EF),Windows Communication Foundation(WCF),CodeFirst开发模式以及Microsoft SQL ...
代理由WCF的**Service Reference**工具自动生成,它封装了调用服务方法和处理返回结果的逻辑。客户端可以发送登录、登出、发送消息等请求,并接收来自服务端的响应。 在**私聊**实现中,客户端需要指定接收者,...
本示例程序以“WPF+WCF+WWF+LINQ完美结合”为主题,旨在展示如何在.NET框架3.0和3.5环境下,整合四种强大的技术:Windows Presentation Foundation (WPF)、Windows Communication Foundation (WCF)、Windows ...
在IT行业中,构建高效、可扩展的软件系统是至关重要的,而"基于EF+WCF的通用三层架构源码及解析"则提供了一种实用的方法来实现这一目标。本项目利用Entity Framework(EF)4.3作为数据访问层,Windows Communication...
在标题提及的“WCF+mvc程序”中,我们可以推断这是一个使用ASP.NET MVC架构开发的小型应用程序,该程序集成了WCF服务以实现特定功能。开发者可能通过在MVC控制器中调用WCF服务,获取或更新数据,然后将这些数据传递...
本文将深入探讨如何使用SQLite作为数据库,并结合ORM(对象关系映射)框架Entity Framework(EF),来实现Windows Communication Foundation(WCF)服务的四种挂载方式。我们将详细解析每种方法的配置步骤,以及在...
结合WCF和EF,我们可以构建一个三层架构的应用程序:表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。在**WCF通讯**中,服务作为业务逻辑层的接口,接收客户端请求并调用BLL进行处理。BLL再通过EF与数据库进行...