一、前言

  作为小菜鸟第一次写博客的我还有点小激动,最近开始打算着手写一个属于自己架构。算下来差不多最近花一周多的下班时间了来写这个框架,本来想整体架构开发完成测试完成后才写博客,怕自己没时间或失去动力,就先把自己架构设计拿出来分享一下,在下一章我会把整体代码公布出来,整体代码。

  在刚开始搭建框架时,首先考虑的是简单轻巧结构清晰,这次搭建大多也是靠着自己想象去设计,其中也有大牛的参考,不管做得怎么样,这也是对自己技术能力的提升(从小菜鸟到菜鸟的过程,^_^)相信自己以后会做得更好。也希望大牛们和大大牛们的指点。不要骂小菜鸟哟,我的小心灵是很脆弱的哦!O(∩_∩)O哈哈~废话不多说了,开始进入主题。

  二、结构图

  

  上图是本项目框架RDF的整体架构,在每一层模块中都只写了基本结构,只简单的标明了他们的关系,详细将在下面介绍。

  

  上图是在项目中的RDF的架构图。

  三、整体结构说明

  现在开始从下往上的介绍:

    1、Infrastructure(基础设施层)

       RDF.Infrastructure:这个类库提供了整体架构的基础核心功能,主要用于与数据有关的操作,例如数据库、缓存、mongoDB等。这里Orm框架我用的是SqlSugar,非常轻巧的一个Orm框架,大家有兴趣也可以去官网看一下。这里提供了公共的仓储封装了常用的方法和缓存,提供了Aop事务拦截器的特征。这里不进行业务代码编写,只提供核心基础模块的调用,这里可以独立的封装为dll来调用。

    2、Domain(业务核心层)

      RDF.Domain:这个类库主要用于业务最核心,最基本的业务逻辑。这里主要以大模块和小的子模块开发为主,子模块主要实现了基础设施层的仓储的公共方法,每个小模块的还可以实现自己的方法逻辑。而大模块实际就是用于处理业务的逻辑,只不过这里实现核心业务,这里操作会调用到很多子模块根据业务复杂度,如果以后要修改一个功能模块就不需要修改子模块,只需要找到相对应的业务模块(主模块)进行修改,主模块就是业务流程的处理,可以根据自己的需求进行模块范围的划分。

    3、Application(应用层)

      RDF.Web.App:这个类库主要对核心业务进行二次处理,这里主要是接受展示层的数据进行与http相关的处理,例如webfrom或mvc或api调用,然后传给核心业务类,根据核心业务的操作进行响应。

    4、Common(公共设施层)

      4.1、RDF.Common:这个类库主要为整个项目提供的公共操作方法,还有log日志记录,这里日志我用的是Nlog,提供了日志拦截器特征,只要打上标签就可以记录该方法可能会出现的异常,相当于以前的异常捕获并处理,这里的处理只需要打上标签输入可能抛出异常的消息并存入数据库和日志文本,可根据配置进行存储,还可以记录该方法是某某什么时间开发的,这样方便找到维护人员进行维护。(注:这里的日志特征和事务特征都是使用的动态接口aop。)

      4.2、RDF.Model:这个类库提供了数据库实体和其它的定义,这里的实体用的是T4模板生成。

    5、Presentation(展现层)

    RDF.Mvc.Site:网站的展示层,配置了autofac进行依赖注入和aop的操作。

    四、总结

    这个项目结构只是最初版本,在下一章开源时,以权限架构为完成目标分享,在代码逐步完成中和测试中,后续框架不合理部分将会重写,架构和代码完善后将会写T4来生成架构。

Mvc+Hui+SqlSugar+Autofac+NLog+T4 架构设计(一)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  7. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  8. Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

    前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的 ...

  9. 架构设计(ASP.NET MVC+Knockout+Web API+SignalR)

    最近忙于重构项目的架构设计,没有时间发博客,也没有时间回复邮件及博文评论,忘各位见谅: 今天先发布架构设计图,同样没有时间写相关的介绍也没有时间回复评论,所以就不发在首页,希望给看到的朋友一些参考,同 ...

随机推荐

  1. 安装使用jupyter

    介绍 jupyter是IPython剥离出来成为一个语言无关的独立软件包. jupyter已经支持50多种语言的内核,包括Lisp.R.F#.Perl.Ruby.Scala等.事实上即使IPython ...

  2. 四元数(Quaternion)和旋转 +欧拉角

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  3. 【转】c++ http下载文件

    #include <afx.h> #include <afxinet.h> #define RECVPACK_SIZE 2048 bool DownloadSaveFiles( ...

  4. 执行系统命令,subprocess使用说明

    os.system('ls -l') #只执行命令,不能将结果赋予变量 os.system('mkdir test')  #创建test目录 files = os.popen('ls -l').rea ...

  5. Azure 负载内部均衡器概述

    Azure 内部负载均衡器 (ILB) 仅将流量定向到云服务内的资源,或使用 VPN 来访问 Azure 基础结构. 在这一点上,ILB 与面向 Internet 的负载均衡器不同. Azure 基础 ...

  6. August 18th 2017 Week 33rd Friday

    If you shed tears when you miss the sun, you also miss the stars. 如果你因为错过太阳而哭泣,你也将会错过繁星. If you have ...

  7. 51nod 1403 有趣的堆栈

    题目看这里 主要是能分析出这样一个结论: 每个pop根据这个元素上面被压过多少个元素,可以知道他是在前面哪个pop之前被push的. 根据这些信息可以求得每个pop到上一个pop之间有多少个push, ...

  8. [DP]洛谷P1115最大子段和

    题目来源 https://www.luogu.org/problemnew/show/P1115 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一 ...

  9. 串口编程 System.IO.Ports.SerialPort类

    从Microsoft .Net 2.0版本以后,就默认提供了System.IO.Ports.SerialPort类,用户可以非常简单地编写少量代码就完成串口的信息收发程序.本文将介绍如何在PC端用C# ...

  10. 泛型举例:List<T>与DateTable相互转换

    一. DataTable转换到List<T> /// <summary> /// TableToList /// </summary> public class T ...