〇、目录

一、前言

二、结构图

三、结构说明

一、前言

  一直以来都想写这个系列,但基于各种理由(主要是懒惰),迟迟没有动手。今天,趁着周末的空档,终于把系列的目录公布出来了,算是开个头,也给自己一个坚持写博客的理由吧。

  这个架构是从我近期在做的一个项目中剥离出来的,这个项目由我从0开始一手搭建,在整个过程中不断学习(在博客园中参考了很多大牛的作品)与思考中不断完善,项目的结构也从一个普通的类PetShop三层结构演变成了现在这样,一切以实用为目的,所以项目的改造过程中并不太严格遵守传统三层的定义,这个在下篇《项目结构搭建》及以后的系列文章中都会提及到,也会与传统三层结构进行对比。

  写这个系列的目的之一也是想把当前项目的架构抽象出来,以希望得到高手大牛们的指点,指出不足之处,以求发展改进。

  本系列使用的开发环境为:Windows 7 SP1、 Visual Studio 2012 (Update2)、TFS2012 (微软TFS云服务)、SQL Server 2008+,并使用 Resharper 7.1 进行代码优化。

二、结构图

   

  上图是本构架的设计图,纵向中间一列为架构主体部分,两边的小列为周边的依赖项,如果横向有交集,则说明主体部分对周边存在依赖。比如GMF.Demo.Core.Data依赖于Domain Models与EntityFramework,但GMf.Demo.Site.Web与GMF.Demo.Site对Entityframework不存在依赖。同样,Log模块也仅为GMF.Demo.Site.Web服务等等,这些在下面的结构说明中也会详加说明。

三、结构说明

    1. Infrastructure(基础设施层):提供系统中与业务无关的基础设施功功能
      1. GMF.Component.Tools:工具组件,提供通用辅助操作功能,扩展方法,异常定义,日志记录定义与实现等功能
      2. GMF.Component.Data:数据组件,提供与业务无关的EF数据上下文,单元操作,仓储操作,EF二级缓存等功能的定义与实现
    2. Core (业务核心层):提供与业务实体密切相关的业务功能
      1. GMF.Demo.Core.Models:业务实体模型,定义用于系统核心业务实现的数据模型的定义
      2. GMF.Demo.Core.Data:业务数据访问定义与实现:提供与业务相关的数据访问功能的实体映射,数据迁移,仓储操作的定义与实现
      3. GMF.Demo.Core:业务核心功能定义与实现:提交与客户端(网站,桌面端,移动端)无关的业务逻辑的实现,业务核心层主要特征如下:
        1. 此层是业务逻辑处理的核心,数据载体为业务实体
        2. 此层所有类为抽象类,需要在相应的客户端(网站,桌面端,移动端)进行继承后才能被展现层调用
        3. 此层要做到客户端(网站、桌面端、移动端)状态(如网站的Cookie,Session等)无关性,所有客户端特有的业务都要在相应的派生层中进行处理,转换为状态无关后再调用此层进行运算
        4. 对于不同客户端(网站、桌面端、移动端)的数据,只需要转换为业务实体即可调用此层代码进行运算,解决相同业务在不同客户端代码重复的问题
    3. Application (站点应用层)
      1. GMF.Demo.Site.Models:网站业务视图模型:定义用于网站业务实现的视图模型的定义
      2. GMF.Demo.Site:网站业务实现,此项目继承于GMF.Demo.Core,主要职能如下:
        1. 对业务执行权限进行检查
        2. 负责把从网站接收的业务视图实体转换为核心业务模型,传给业务核心层进行业务处理
        3. 处理与Http密切相关的数据(Session、Cookie等),处理成与Http状态无关后再交由核心层进行处理
    4. Presentation (展现层)
      1. GMF.Demo.Client.Consoles:业务控制台,可对功能代码段,核心业务等功能进行调用测试。
      2. GMF.Demo.Site.Web:网站UI展现
        1. 对Action执行权限进行检查
        2. 接收用户输入并转交给站点业务层进行处理
        3. 记录功能操作的日志记录与异常日志

MVC 实用架构设计(〇)——总体设计的更多相关文章

  1. MVC实用架构设计:总体设计

    http://developer.51cto.com/art/201309/410166.htm

  2. MVC实用架构设计(三)——EF-Code First(5):二级缓存

    前言 今天我们来谈谈EF的缓存问题. 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象.EF4开始会把查询语句编译成存储过程缓存在Sql Server中,据说 ...

  3. MVC实用架构设计(三)——EF-Code First(4):数据查询

    前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了.实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写.另外也 ...

  4. MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...

  5. MVC实用架构设计(三)——EF-Code First(1):Repository,UnitOfWork,DbContext

    前言 终于到EF了,实在不好意思,最近有点忙,本篇离上一篇发布已经一个多星期了,工作中的小迭代告一段落,终于有点时间来继续我们的架构设计了,在这里先对大家表示歉意. 其实这段时间我并不是把这个系列给忘 ...

  6. [转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    本文转自:http://www.cnblogs.com/guomingfeng/p/mvc-ef-t4.html 〇.目录 一.前言 二.工具准备 三.T4代码生成预热 (一) 单文件生成:Hello ...

  7. MVC 实用架构设计(三)——EF-Code First(5):二级缓存

    一.前言 今天我们来谈谈EF的缓存问题. 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象.EF4开始会把查询语句编译成存储过程缓存在Sql Server中, ...

  8. MVC实用构架设计(三)——EF-Code First(6):数据更新最佳实践

    前言 最近在整理EntityFramework数据更新的代码,颇有体会,觉得有分享的价值,于是记录下来,让需要的人少走些弯路也是好的. 为方便起见,先创建一个控制台工程,使用using(var db ...

  9. MVC 国内架构设计

    http://www.cnblogs.com/guomingfeng/p/mvc-ef-query.html http://www.cnblogs.com/haogj/p/3127795.html

随机推荐

  1. win8下C盘不能读写的解决方案[zz]

    做系统安全的时候发现了这个/setintegritylevel参数,没有找到更多资料,找到此文,看来这个参数有点神奇哟!我一个同事遇到了这个问题,主要症状:1.C 盘文件不能修改2.C 盘不能新建文件 ...

  2. Android Studio配置Android Annotations框架详解--说说那些坑

    我们开发过程中都需要写些findViewByid.serOnclickListener等类似的代码,虽然不费事,但是一个项目下来,工作量还是很大的.为了节省工作量,运生了很多对应的注解框架.网上的博客 ...

  3. .NET CORE MYSQL 微信小程序 HTTPS 随笔

    今天一天都没有撸码,没写BUG没改BUG,整一天都在弄那个微信小程序的配置了..唉.. 一个项目用的微信小程序,界面做出来了,就等着AJAX取网络数据后再显示到界面上了,查了下文档, 小程序取网络数据 ...

  4. Multiplication of numbers

    Questin: There is an array A[N] of N numbers. You have to compose an array Output[N] such that Outpu ...

  5. Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程

    以下步骤在Windows 7系统中操作.XBox One手柄+无线适配器并非仅只能在Windows 10中使用. 一点感想:微软的XBoxOne手柄实在是好东西,但产品使用说明与文档实在太垃圾,翻遍官 ...

  6. Python3求解字符串滤值与百元买百鸡算法

    [本文出自天外归云的博客园] 第一题:给你一个字符串,打印出来前后没有空格,单词之间只有一个空格的字符串. 第二题:公鸡3元/只,母鸡4元/只,小鸡1元3只,给你money元一共多少种买法. 普通版解 ...

  7. git命令之git clone用法

    在使用git来进行版本控制时,为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s):/ ...

  8. Linux磁盘概念及其管理工具fdisk

    Linux磁盘概念及其管理工具fdisk [日期:2016-08-27] 来源:Linux社区  作者:chawan [字体:大 中 小]   引言:冯诺依曼体系中的数据存储器就是我们常说的磁盘或硬盘 ...

  9. 安卓开发笔记——关于开源组件PullToRefresh实现下拉刷新和上拉加载(一分钟搞定,超级简单)

    前言 以前在实现ListView下拉刷新和上拉加载数据的时候都是去继承原生的ListView重写它的一些方法,实现起来非常繁杂,需要我们自己去给ListView定制下拉刷新和上拉加载的布局文件,然后添 ...

  10. [Tensorflow] RNN - 03. MultiRNNCell for Digit Prediction

    Ref: http://blog.csdn.net/u014595019/article/details/52759104 Time: 2min Successfully downloaded tra ...