首先在github上面将ProDinner项目通过 Git Bash 克隆到本地,接下来我们开始分析这个项目吧~

系统采用.Net 4.5, Asp.net Mvc 5,VS2012,Sql server,系统的整体设计非常轻量级,却做到了整体架构分层明显,模块耦合度低的架构思想,很适合新手学习.

Core层实现了本地化Model和EF模型化需要的model数据,另外,Core层还为低耦合的业务逻辑和低耦合的数据访问做好了接口准备.

1.Model:

以下是表关系的大致内容:

我们在分析数据库表结构的时候,经常会发现表与表之间有很多共同的字段,例如Id,操作时间,操作人等等,所以可以为这些表构造公共基类,比如Entity就是所有表的基类.而事实上,对First Code而言,根本就不存在数据库的概念.

  1. public class Entity
  2. {
  3. public int Id { get; set; }
  4. }
  5.  
  6. public class Feedback : Entity
  7. {
  8. public string Comments { get; set; }
  9. }
  10.  
  11. public class Meal : DelEntity
  12. {
  13. public string Name { get; set; }
  14. public string Comments { get; set; }
  15. public virtual ICollection<Dinner> Dinners { get; set; }
  16. public string Picture { get; set; }
  17. }
  18.  
  19. public class Role : Entity
  20. {
  21. public string Name { get; set; }
  22. public virtual ICollection<User> Users { get; set; }
  23. }
  24.  
  25. public class User : DelEntity
  26. {
  27. public string Login { get; set; }
  28. public string Password { get; set; }
  29. public virtual ICollection<Role> Roles { get; set; }
  30. }
  31.  
  32. public class Dinner : DelEntity
  33. {
  34. public string Name { get; set; }
  35. public int CountryId { get; set; }
  36. public virtual Country Country { get; set; }
  37. public int ChefId { get; set; }
  38. public virtual Chef Chef { get; set; }
  39. public string Address { get; set; }
  40. public DateTime Start { get; set; }
  41. public DateTime End { get; set; }
  42. public virtual ICollection<Meal> Meals { get; set; }
  43. }
  44.  
  45. public class DelEntity : Entity, IDel
  46. {
  47. public bool IsDeleted { get; set; }
  48. }
  49.  
  50. public class Country : DelEntity
  51. {
  52. public string Name { get; set; }
  53. }
  54.  
  55. public class Chef : DelEntity
  56. {
  57. public string FirstName { get; set; }
  58. public string LastName { get; set; }
  59. public int CountryId { get; set; }
  60. public virtual Country Country { get; set; }
  61. }
  62.  
  63. public interface IDel
  64. {
  65. bool IsDeleted { get; set; }
  66. }

从代码中可以看出,涉及到表关联的时候,统一使用了ICollection<T>的集合,类型都是Virtual,这表明这一Model层都是接口和基类,会被重写.

接下来就是创建应用程序所需的业务类.

2.Repository(仓库)

  1. public interface IDelRepo<T>
  2. {
  3. IQueryable<T> Where(Expression<Func<T, bool>> predicate, bool showDeleted = false);
  4. IQueryable<T> GetAll();
  5. void Restore(T o);
  6. }
  7. public interface IRepo<T>
  8. {
  9. T Get(int id);
  10. IQueryable<T> GetAll();
  11. IQueryable<T> Where(Expression<Func<T, bool>> predicate, bool showDeleted = false);
  12. T Insert(T o);
  13. void Save();
  14. void Delete(T o);
  15. void Restore(T o);
  16. }
  17. public interface IUniRepo
  18. {
  19. T Insert<T>(T o) where T : Entity, new();
  20. void Save();
  21. T Get<T>(int id) where T : Entity;
  22. IEnumerable<T> GetAll<T>() where T : Entity;
  23.  
  24. }

从代码可以很明显看出,这是数据操作方式和数据业务逻辑的函数原型,其后service的所有具体实现的实体数据操作都会基于这些接口.

3.Security

引用了Asp.net的身份验证模块,故也进行了相应的接口限制

  1. public interface IFormsAuthentication
  2. {
  3. void SignIn(string userName, bool createPersistentCookie, IEnumerable<string> roles);
  4. void SignOut();
  5. }

4.Service

该层接口详细定义了四个类的操作接口:

ICrudService继承了上层接口的抽象接口

IMealService类继承了 ICrudService 同时,规定了图片保存的接口

IUserService继承了ICrudService,规定了用户验证的接口

5.ProDinnerException规定了系统自定义的抛错机制。

至此,Core层就介绍完了~

ASP.NET MVC 开源项目学习之ProDinner (一)的更多相关文章

  1. ASP.NET MVC 开源项目学习之ProDinner (二)

    下面我们来看第二层:Data   这一层相对来说是对Core层的具体实现了. 从命名可以看出来,这和数据库相关. 1.Db.cs CodeFirst模式的本地数据库类,继承了DbContext. pr ...

  2. ASP.NET MVC 开源项目学习之ProDinner (三)

    第四层:Resources   这一层里面主要是几个资源文件. 资源文件知识小杂烩: 几乎每一个生产性应用程序都需要使用资源.资源是在逻辑上由应用程序部署的任何非可执行数据.资源可以在应用程序中作为错 ...

  3. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  4. ASP.Net MVC开发基础学习笔记(1):走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  5. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  6. angular2+typescript在asp.net MVC Web项目上的实现

    网上现在还没有关于angular2+typescript在asp.net mvc web项目上的实现的系统介绍,这里我也只是探索到了一个简单的方式,还有很多问题没能解决.但是能有个好的开头也值得记录一 ...

  7. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  8. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  9. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

随机推荐

  1. [实变函数]5.2 非负简单函数的 Lebesgue 积分

    1 设        $$\bex        \phi(x)=\sum_{i=1}^j c_i\chi_{E_i}(x),\quad c_i\geq 0,        \eex$$ 其中     ...

  2. xss 和 csrf攻击详解

    在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是,历史同 ...

  3. ANT教程经典

    Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一.            ...

  4. jsLint配置参数解释

    转自: http://www.cnblogs.com/elementstorm/archive/2013/04/10/3012679.htmlanon :true //匿名函数声明中function关 ...

  5. C++学习6

    类是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型.类这种数据类型是一个包含成员变量和成员函数的一个集合. 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存空间.但 ...

  6. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  7. C Primer Plus(第五版)6

    第 6 章 C 控制语句 : 循环 在本章中你将学习下列内容 已经多次学过,没怎么标注 · 关键字: for while do while · 运算符: < > >= <= ! ...

  8. 部门子部门表结构,递归指定部门的所有子部门SQL函数

  9. 《Head First 设计模式》ch.2 观察者(Observer)模式

    观察者模式 定义了对象之间一对多以来,这样一来,当一个对象改变状态时,它所有的依赖者都会收到通知并自动更新 设计原则-松耦合 松耦合将对象之间的互相依赖降到了最低——只要他们之间的接口仍被遵守 观察者 ...

  10. Codeforces Round #219 (Div. 1) C. Watching Fireworks is Fun

    C. Watching Fireworks is Fun time limit per test 4 seconds memory limit per test 256 megabytes input ...