一,摘要
在上一篇文章(http://blog.youkuaiyun.com/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;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using MyFinance.Domain;
6: using MyFinance.Data.Infrastructure;
7:
8: namespace MyFinance.Data
9: {
10: public class ExpenseRepository : RepositoryBase<Expense>, IExpenseRepository
11: {
12: public ExpenseRepository(IDatabaseFactory databaseFactory)
13: : base(databaseFactory)
14: {
15: }
16: }
17: public interface IExpenseRepository : IRepository<Expense>
18: {
19: }
20: }
三,建立服务层
由于控制器不适合进行大量的业务逻辑处理,所以服务层封装所有的业务逻辑,进行调用即可.下面创建Expense的服务层:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using MVC3DIApplication.Domain;
6: using MVC3DIApplication.Data.Infrastructure;
7: using MVC3DIApplication.Data;
8:
9: namespace MVC3DIApplication.Service
10: {
11: //接口
12: public interface IExpenseService
13: {
14: IEnumerable
GetExpenses(DateTime startDate, DateTime ednDate);
15: Expense GetExpense(int id);
16: void CreateExpense(Expense expense);
17: void DeleteExpense(int id);
18: void SaveExpense();
19: }
20: //实现接口
21: public class ExpenseService : IExpenseService
22: {
23: private readonly IExpenseRepository expenseRepository;
24: private readonly IUnitOfWork unitOfWork;
25: public ExpenseService(IExpenseRepository expenseRepository, IUnitOfWork unitOfWork)
26: {
27: this.expenseRepository = expenseRepository;
28: this.unitOfWork = unitOfWork;
29: }
30: public IEnumerable GetExpenses(DateTime startDate, DateTime endDate)
31: {
32: //由于进行了依赖注入,所以不需要手动new,直接使用上面expenseRepository调用即可;
33: var expenses = expenseRepository.GetMany(exp => exp.Date >= startDate && exp.Date <= endDate);
34: return expenses;
35: }
36: public void CreateExpense(Expense expense)
37: {
38: expenseRepository.Add(expense);
39: unitOfWork.Commit();
40: }
41: public Expense GetExpense(int id)
42: {
43: var expense = expenseRepository.GetById(id);
44: return expense;
45: }
46: public void DeleteExpense(int id)
47: {
48: var expense = expenseRepository.GetById(id);
49: expenseRepository.Delete(expense);
50: unitOfWork.Commit();
51: }
52: public void SaveExpense()
53: {
54: unitOfWork.Commit();
55: }
56: }
57: }
58:
59:
四,总结
通过这两篇文章我相信读者朋友能过掌握该结构的使用,由于时间关系我就要把要点写了下,源代码稍后以留言的形式提供,谢谢您的访问!