一,摘要
在上一篇文章(http://blog.csdn.net/suzhi921/archive/2011/02/16/6188768.aspx)中,我们讨论了如何应用MVC3以及Code First建立应用程序,以及应用域实体创建了CRUD的操作,在本篇文章我们将更进一步讨论领域实体,服务层,以及View Models,完成我们Web应用程序剩余的部分.使用的工具如下:
1.ASP.NET MVC 3
2.EF Code First CTP5
3.Unity2.0
二,创建Expense类的Repository
由于所有的CRUD操作封装在Base类里,所以只需继承基类就可以完成CRUD操作:
ExpenseRepository.cs:
1: using System;
<!--CRLF-->
2: using System.Collections.Generic;
<!--CRLF-->
3: using System.Linq;
<!--CRLF-->
4: using System.Text;
<!--CRLF-->
5: using MyFinance.Domain;
<!--CRLF-->
6: using MyFinance.Data.Infrastructure;
<!--CRLF-->
7:
<!--CRLF-->
8: namespace MyFinance.Data
<!--CRLF-->
9: {
<!--CRLF-->
10: public class ExpenseRepository : RepositoryBaseExpense>, IExpenseRepository
<!--CRLF-->
11: {
<!--CRLF-->
12: public ExpenseRepository(IDatabaseFactory databaseFactory)
<!--CRLF-->
13: : base(databaseFactory)
<!--CRLF-->
14: {
<!--CRLF-->
15: }
<!--CRLF-->
16: }
<!--CRLF-->
17: public interface IExpenseRepository : IRepositoryExpense>
<!--CRLF-->
18: {
<!--CRLF-->
19: }
<!--CRLF-->
20: }
<!--CRLF-->
三,建立服务层
由于控制器不适合进行大量的业务逻辑处理,所以服务层封装所有的业务逻辑,进行调用即可.下面创建Expense的服务层:
1: using System;
<!--CRLF-->
2: using System.Collections.Generic;
<!--CRLF-->
3: using System.Linq;
<!--CRLF-->
4: using System.Text;
<!--CRLF-->
5: using MVC3DIApplication.Domain;
<!--CRLF-->
6: using MVC3DIApplication.Data.Infrastructure;
<!--CRLF-->
7: using MVC3DIApplication.Data;
<!--CRLF-->
8:
<!--CRLF-->
9: namespace MVC3DIApplication.Service
<!--CRLF-->
10: {
<!--CRLF-->
11: //接口
<!--CRLF-->
12: public interface IExpenseService
<!--CRLF-->
13: {
<!--CRLF-->
14: IEnumerable<expense> GetExpenses(DateTime startDate, DateTime ednDate);</expense>
<!--CRLF-->
15: Expense GetExpense(int id);
<!--CRLF-->
16: void CreateExpense(Expense expense);
<!--CRLF-->
17: void DeleteExpense(int id);
<!--CRLF-->
18: void SaveExpense();
<!--CRLF-->
19: }
<!--CRLF-->
20: //实现接口
<!--CRLF-->
21: public class ExpenseService : IExpenseService
<!--CRLF-->
22: {
<!--CRLF-->
23: private readonly IExpenseRepository expenseRepository;
<!--CRLF-->
24: private readonly IUnitOfWork unitOfWork;
<!--CRLF-->
25: public ExpenseService(IExpenseRepository expenseRepository, IUnitOfWork unitOfWork)
<!--CRLF-->
26: {
<!--CRLF-->
27: this.expenseRepository = expenseRepository;
<!--CRLF-->
28: this.unitOfWork = unitOfWork;
<!--CRLF-->
29: }
<!--CRLF-->
30: public IEnumerable<expense> GetExpenses(DateTime startDate, DateTime endDate)</expense>
<!--CRLF-->
31: {
<!--CRLF-->
32: //由于进行了依赖注入,所以不需要手动new,直接使用上面expenseRepository调用即可;
<!--CRLF-->
33: var expenses = expenseRepository.GetMany(exp => exp.Date >= startDate && exp.Date
<!--CRLF-->
34: return expenses;
<!--CRLF-->
35: }
<!--CRLF-->
36: public void CreateExpense(Expense expense)
<!--CRLF-->
37: {
<!--CRLF-->
38: expenseRepository.Add(expense);
<!--CRLF-->
39: unitOfWork.Commit();
<!--CRLF-->
40: }
<!--CRLF-->
41: public Expense GetExpense(int id)
<!--CRLF-->
42: {
<!--CRLF-->
43: var expense = expenseRepository.GetById(id);
<!--CRLF-->
44: return expense;
<!--CRLF-->
45: }
<!--CRLF-->
46: public void DeleteExpense(int id)
<!--CRLF-->
47: {
<!--CRLF-->
48: var expense = expenseRepository.GetById(id);
<!--CRLF-->
49: expenseRepository.Delete(expense);
<!--CRLF-->
50: unitOfWork.Commit();
<!--CRLF-->
51: }
<!--CRLF-->
52: public void SaveExpense()
<!--CRLF-->
53: {
<!--CRLF-->
54: unitOfWork.Commit();
<!--CRLF-->
55: }
<!--CRLF-->
56: }
<!--CRLF-->
57: }
<!--CRLF-->
58:
<!--CRLF-->
59:
<!--CRLF-->
四,总结
通过这两篇文章我相信读者朋友能过掌握该结构的使用,由于时间关系我就要把要点写了下,源代码稍后以留言的形式提供,谢谢您的访问!
分享到:
相关推荐
上期技术CTP行情及交易接口.Net封装 本次更新到CTP官方库20120530版本,增加了Multiple AppDomain支持
C# .net 的开发源文件,可以给大家做为一个参考
上期技术CTP行情交易接口.Net封装完整版 CTP.dll 将非托管C++库转换为托管库,供.Net程序调用。包括行情接口和交易接口。 Struct.h头文件修改自海风版C#的Struct.cs文件,非常感谢! CSharpMdTest C#行情接口测试...
ASPAJAXTP.msi ASP.NET AJAX Futures January CTP ASPAJAXSamples ASP.NET AJAX Samples AjaxControlToolkit.zip AJAX Control Toolkit,需自己编译 Validators.zip是在Bet1a,Beta2,RC中自带但在Relase中被移到...
ASP.NET2.0 AJAX包括:ASP.NET 2.0 AJAX Extensions和ASP.NET Futures CTP.放心下载可用! 支持vs2005sp1!不要用vs2005的哟!否则web.config中会出现错误的!
asp.net ajax 安装包,Extensions、CTP版、Contrtoolkit全都有!!! 支持.net framwork 2.0!
ASPAJAXTP.msi ASP.NET AJAX Futures January CTP ASPAJAXSamples ASP.NET AJAX Samples AjaxControlToolkit.zip AJAX Control Toolkit,需自己编译 Validators.zip是在Bet1a,Beta2,RC中自带但在Relase中被移到...
ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,...
c#封装上期技术ctp接口,很好用,可以用于开发自己的交易系统
ASP.NET AJAX框架安装包,包括ASP.NET 2.0 AJAX Extensions 以及 ASP.NET AJAX Futures CTP 包,在VS2005上安装这两个包后可以获得丰富的服务器端控件。
目前最新的WCF版本是February 2006 CTP,下载页面是:http://www.microsoft.com/downloads/details.aspx?FamilyId=F51C4D96-9AEA-474F-86D3-172BFA3B828B&displaylang=en。使用WCF需要用到一些相关的工具,如SvcUtil...
我们可以看到,此时Web Forms\MVC\Web API复选框都选择不了,原有是因为在ASP.NET 5中做了大量更改,移除了Web Forms功能,将MVC、Web API、Web Pages这些功能合在了一起,所以自然就不需要这些复选框了。...
CSharp 写的QQ客户端程序\是学习研究的不可缺少的好东西
上期所的CTP行情及交易接口使用.Net封装 本次更新为CTP官方20120530版本,并且增加了Multiple AppDomain支持
.279 Chapter 13: ASP.NET AJAX Futures CTP: Online Content. . . . . . . . . . . . . . . 319 Appendix: Resources. . . . . . . . . . . . . . . 325 Index. . . . . . . . . . . . . . . . . . . . ....
CTP.Net 是一个将上期技术的CTP C++库转换为托管库,供.Net程序调用的项目。 目前支持期货、证券和期权接口。 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言...
收录3个版本的CTP API接口封装 1.直接C++调用版2.Visual C++.net封装C#调用版3.海风C++封装公开dll接口C#调用版
本文档仅仅是对《CTP开发手册》的补充,对于下面将要描述的每一个点,在《CTP开发手册》中都有详细的描述。这里把他们提出来再做说明,仅仅因为这些点是CTP开发中的关键,以提醒用户注意。 CTP作为一个B/S应用系统...
ASP.NET AJAX Beta2.0控件 没有安装ASPAJAXExtSetup.rar时,ASPAJAXExtBeta2Setup此版不能安装 ASPAJAXBeta2CTP.rar(没有安装ASPAJAXExtBeta2Setup.rar时,此版不能安装) ASPAJAXBeta2Samples.rar(这是官方提供的...